我可以在json文件里使用注释吗? 如果是的话,怎么写?
当前回答
json不允许评论本身。推理是完全愚蠢的, 因为你可以使用json自己来创造评论, 这完全排除了推理, 并且毫无理由地在完全相同的结果和潜在问题上加载采集数据空间, 比如: 带有评论的json文件。
如果您试图在(使用 / 或 / * * * 或 ) 中发表评论, 那么某些剖析器将会失败, 因为严格来说这不在json 的规格之内 。 所以您不应该这样做 。
例如,在这里,我的图像操作系统保存了图像标记和一些基本格式化(注释)信息(底部):
{
"Notations": [
{
"anchorX": 333,
"anchorY": 265,
"areaMode": "Ellipse",
"extentX": 356,
"extentY": 294,
"opacity": 0.5,
"text": "Elliptical area on top",
"textX": 333,
"textY": 265,
"title": "Notation 1"
},
{
"anchorX": 87,
"anchorY": 385,
"areaMode": "Rectangle",
"extentX": 109,
"extentY": 412,
"opacity": 0.5,
"text": "Rect area\non bottom",
"textX": 98,
"textY": 385,
"title": "Notation 2"
},
{
"anchorX": 69,
"anchorY": 104,
"areaMode": "Polygon",
"extentX": 102,
"extentY": 136,
"opacity": 0.5,
"pointList": [
{
"i": 0,
"x": 83,
"y": 104
},
{
"i": 1,
"x": 69,
"y": 136
},
{
"i": 2,
"x": 102,
"y": 132
},
{
"i": 3,
"x": 83,
"y": 104
}
],
"text": "Simple polygon",
"textX": 85,
"textY": 104,
"title": "Notation 3"
}
],
"imageXW": 512,
"imageYW": 512,
"imageName": "lena_std.ato",
"tinyDocs": {
"c01": "JSON image notation data:",
"c02": "-------------------------",
"c03": "",
"c04": "This data contains image notations and related area",
"c05": "selection information that provides a means for an",
"c06": "image gallery to display notations with elliptical,",
"c07": "rectangular, polygonal or freehand area indications",
"c08": "over an image displayed to a gallery visitor.",
"c09": "",
"c10": "X and Y positions are all in image space. The image",
"c11": "resolution is given as imageXW and imageYW, which",
"c12": "you use to scale the notation areas to their proper",
"c13": "locations and sizes for your display of the image,",
"c14": "regardless of scale.",
"c15": "",
"c16": "For Ellipses, anchor is the center of the ellipse,",
"c17": "and the extents are the X and Y radii respectively.",
"c18": "",
"c19": "For Rectangles, the anchor is the top left and the",
"c20": "extents are the bottom right.",
"c21": "",
"c22": "For Freehand and Polygon area modes, the pointList",
"c23": "contains a series of numbered XY points. If the area",
"c24": "is closed, the last point will be the same as the",
"c25": "first, so all you have to be concerned with is drawing",
"c26": "lines between the points in the list. Anchor and extent",
"c27": "are set to the top left and bottom right of the indicated",
"c28": "region, and can be used as a simplistic rectangular",
"c29": "detect for the mouse hover position over these types",
"c30": "of areas.",
"c31": "",
"c32": "The textx and texty positions provide basic positioning",
"c33": "information to help you locate the text information",
"c34": "in a reasonable location associated with the area",
"c35": "indication.",
"c36": "",
"c37": "Opacity is a value between 0 and 1, where .5 represents",
"c38": "a 50% opaque backdrop and 1.0 represents a fully opaque",
"c39": "backdrop. Recommendation is that regions be drawn",
"c40": "only if the user hovers the pointer over the image,",
"c41": "and that the text associated with the regions be drawn",
"c42": "only if the user hovers the pointer over the indicated",
"c43": "region."
}
}
其他回答
您应该撰写json schema。json schema目前是一份拟议互联网规格草案。除文档外,该schema还可以用于验证您的json数据 。
例如:
{
"description": "A person",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer",
"maximum": 125
}
}
}
您可以使用描述 schema 属性提供文档。
json不支持本地的评论, 但您可以自己做解码器或至少预处理器来删除评论, 这完全没问题(只要您只是忽略评论, 不使用它们来指导您的应用程序如何处理json数据 ) 。
json 没有评论。 json 编码器不能输出评论。 json 编码器可以接受和忽略评论。
评论不应被用来传递任何有意义的信息。 这就是json的目的。
参考:杜格拉斯·克罗福德,Json Spec的作者。
正如许多答案已经指出的,Json在本地没有评论。当然,有时你还是想要评论。对python来说,两种方法就是评论json(和//仅对python 2)或json_tricks(或//对python 2和python 3),这有其他几个特点。免责声明:我做了json_tricks。
json 的作者希望我们把评论写进json里, 但是在解析之前先把评论删掉( 见 Michael Burr 提供的链接 ) 。 如果json 有评论的话, 为什么不将评论标准化, 让 Json 牧师来做工作? 我不同意这里的逻辑, 但是, 可惜, 这就是标准。 使用其他人建议的山药解决方案是好的, 但是它需要图书馆的依赖性 。
如果您想要删除注释, 但不想有图书馆依赖性, 这里是一个双线解决方案, 用于 c++- 风格的注释, 但可以适应其它选项 :
var comments = new RegExp("//.*", 'mg');
data = JSON.parse(fs.readFileSync(sample_file, 'utf8').replace(comments, ''));
请注意,只有在您可以确定json数据不含评论启动器的情况下,例如('/'),才能使用这一解决方案。
实现 json 解析、 解析评论和不增加图书馆的另一种方法, 就是用 javascript 解释器来评价json 。 当然, 这个方法的提醒是, 您只想要评价未污染的数据( 不可信用户- 输入 ) 。 这是在 node. js 中的一个例子-- 另一个警告, 以下示例将只读过一次数据, 然后它会被缓存 :
data = require(fs.realpathSync(doctree_fp));
免责声明:这太愚蠢了
实际上有一种方式可以添加评论,并且不超出规格(不需要额外的分析师)。 它不会在不作任何区分的情况下产生人类可读的评论。
您可滥用下列手段:
允许在任何象征性之前或之后使用微小的白色空间。 白空间是以下一个或多个代码点的任何序列: 字符制表( u+0009)、 线性种子( u+000a)、 运输返回( u+000d) 和空间( u+0020)。
黑客方式, 您可以滥用此选项添加注释 。 例如 : 开始并用标签结束您的评论 。 在 base 3 编码注释, 并使用其他空白字符来代表它们 。 例如 。
010212 010202 011000 011000 011010 001012 010122 010121 011021 010202 001012 011022 010212 011020 010202 010202
(在Ascii中为3号基数你好),但不使用0个空间,而是用于1条线路上网和2条运输回程。
这将只留下许多无法读取的白色空间( 除非您用一个 ide 插件来编码/ 解码在苍蝇上) 。
我从来没有尝试过这个, 原因很明显,你也不应该。
推荐文章
- 如何在Typescript中解析JSON字符串
- 错误"Uncaught SyntaxError:意外的标记与JSON.parse"
- 从JSON生成Java类?
- 使用Jackson将Java对象转换为JSON
- Javascript对象Vs JSON
- 在Swift中将字典转换为JSON
- 如何使用新的PostgreSQL JSON数据类型中的字段进行查询?
- 将类实例序列化为JSON
- JSON和对象文字表示法的区别是什么?
- 是否有与XQuery/XPath等价的JSON ?
- 对bash脚本函数中定义的变量使用curl POST
- 从Json转换为类型数组列表<T>
- REST API最佳实践:查询字符串中的参数vs请求体中的参数
- 打印JSON解析对象?
- JSON有查询语言吗?