我可以在JSON文件中使用注释吗?如果是这样,怎么样?
我可以在JSON文件中使用注释吗?如果是这样,怎么样?
没有。
JSON应该都是数据,如果你包含注释,那么它也将是数据。
您可以调用指定的数据元素 "_comment"
(或其他)使用JSON数据的应用程序将忽略这些内容。
你可能会更好地在生成/接收JSON的进程中发表评论,因为他们应该事先了解JSON数据,或者至少知道它的结构。
但是如果你决定:
{
"_comment": "comment text goes here...",
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
没有,表格的评论 //…
要么 /*…*/
JSON中不允许使用。这个答案基于:
application/json
JavaScript对象表示法的媒体类型(JSON)如果您选择,请附上评论;在解析或传输之前用缩小器将它们剥离。
我刚刚发布了 JSON.minify() 它从JSON块中删除注释和空格,并使其成为可以解析的有效JSON。所以,您可以使用它:
JSON.parse(JSON.minify(my_str));
当我发布它的时候,我得到了一个强烈反对,甚至不同意它的想法,所以我决定写一篇关于为什么的综合博客文章 评论在JSON中有意义。它包括来自JSON创建者的这个值得注意的评论:
假设您使用JSON来保留要注释的配置文件。继续,插入您喜欢的所有评论。然后通过JSMin将其传递给JSON解析器。 - 道格拉斯·克罗克福德,2012年
希望这对那些不同意原因的人有所帮助 JSON.minify() 可能有用。
评论已从JSON中删除。
我从JSON中删除了注释,因为我看到有人使用它们来保存解析指令,这种做法会破坏互操作性。我知道缺乏评论会让一些人感到悲伤,但事实并非如此。
假设您使用JSON来保留要注释的配置文件。继续,插入您喜欢的所有评论。然后通过JSMin将其传递给JSON解析器。
免责声明:您的保修是无效的
正如已经指出的那样,这个hack利用了规范的实现。并非所有JSON解析器都能理解这种JSON。流式解析器尤其会窒息。
这是一个有趣的好奇心,但是你 真的不应该用它来做任何事情。以下是原始答案。
我发现了一个小的hack,它允许你将注释放在一个不会影响解析的JSON文件中,或者改变以任何方式表示的数据。
看来,在声明对象文字时,您可以使用相同的键指定两个值,最后一个值优先。信不信由你,事实证明JSON解析器的工作方式相同。因此,我们可以使用它在源JSON中创建注释,这些注释不会出现在已解析的对象表示中。
({a: 1, a: 2});
// => Object {a: 2}
Object.keys(JSON.parse('{"a": 1, "a": 2}')).length;
// => 1
如果我们应用此技术,您注释的JSON文件可能如下所示:
{
"api_host" : "The hostname of your API server. You may also specify the port.",
"api_host" : "hodorhodor.com",
"retry_interval" : "The interval in seconds between retrying failed API calls",
"retry_interval" : 10,
"auth_token" : "The authentication token. It is available in your developer dashboard under 'Settings'",
"auth_token" : "5ad0eb93697215bc0d48a7b69aa6fb8b",
"favorite_numbers": "An array containing my all-time favorite numbers",
"favorite_numbers": [19, 13, 53]
}
上面的代码是 有效的JSON。如果你解析它,你会得到一个像这样的对象:
{
"api_host": "hodorhodor.com",
"retry_interval": 10,
"auth_token": "5ad0eb93697215bc0d48a7b69aa6fb8b",
"favorite_numbers": [19,13,53]
}
这意味着没有评论的痕迹,他们不会有奇怪的副作用。
快乐的黑客!
JSON不支持评论。它也从未打算用于需要注释的配置文件。
Hjson是人类的配置文件格式。轻松的语法,更少的错误,更多的评论。
看到 hjson.org 适用于JavaScript,Java,Python,PHP,Rust,Go,Ruby和C#库。
你不能。至少这是我从快速浏览一下的经历 json.org。
JSON的语法在该页面上可视化。关于评论没有任何说明。
考虑使用YAML。它几乎是JSON的超集(几乎所有有效的JSON都是有效的YAML),它允许注释。
你应该写一个 JSON模式 代替。 JSON模式目前是一个提议的Internet草案规范。除了文档,架构还可用于验证您的JSON数据。
例:
{
"description":"A person",
"type":"object",
"properties":
{
"name":
{
"type":"string"
},
"age":
{
"type":"integer",
"maximum":125
}
}
}
您可以使用以下方式提供文档 描述 架构属性。
如果你正在使用 杰克逊 作为您的JSON解析器,这是您启用它以允许注释的方式:
ObjectMapper mapper = new ObjectMapper().configure(Feature.ALLOW_COMMENTS, true);
然后你可以有这样的评论:
{
key: "value" // comment
}
你也可以从评论开始 #
通过设置:
mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);
但总的来说(如前所述)规范不允许评论。