我可以在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 中不允许使用//…
or形式的注释。/*…*/
这个答案是基于:
- https://www.json.org
- RFC 4627:
application/json
JavaScript 对象表示法 (JSON) 的媒体类型 - RFC 8259 JavaScript 对象表示法 (JSON) 数据交换格式(取代 RFC 4627、7158、7159)
如果您选择,请包括评论;在解析或传输之前用压缩器去除它们。
我刚刚发布了JSON.minify(),它从 JSON 块中去除注释和空格,并使其成为可以解析的有效 JSON。所以,你可以像这样使用它:
JSON.parse(JSON.minify(my_str));
当我发布它时,人们强烈反对甚至不同意它的想法,所以我决定写一篇全面的博客文章,说明为什么注释在 JSON 中有意义。它包括来自 JSON 的创建者的这条值得注意的评论:
假设您正在使用 JSON 来保存您想要注释的配置文件。继续并插入您喜欢的所有评论。然后通过 JSMin 将其传递给 JSON 解析器。-道格拉斯·克罗克福德,2012 年
希望这对那些不同意为什么JSON.minify()有用的人有所帮助。
注释已按设计从 JSON 中删除。
我从 JSON 中删除了注释,因为我看到人们使用它们来保存解析指令,这种做法会破坏互操作性。我知道缺少评论会让一些人难过,但不应该这样。
假设您正在使用 JSON 来保存您想要注释的配置文件。继续并插入您喜欢的所有评论。然后通过 JSMin 将其传递给 JSON 解析器。
JSON 不支持注释。它也从未打算用于需要注释的配置文件。
Hjson 是人类的配置文件格式。宽松的语法,更少的错误,更多的评论。
有关 JavaScript、Java、Python、PHP、Rust、Go、Ruby、C++ 和 C# 库的信息,请参见hjson.github.io 。
免责声明:您的保证无效
正如已经指出的那样,这个 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]
}
这意味着没有评论的踪迹,并且它们不会产生奇怪的副作用。
快乐黑客!
考虑使用YAML。它几乎是 JSON 的超集(实际上所有有效的 JSON 都是有效的 YAML)并且它允许注释。
你不能。至少这是我快速浏览json.org的经验。
JSON 的语法在该页面上可视化。没有任何关于评论的说明。