我可以在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 4627application/jsonJavaScript 对象表示法 (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 解析器。

资料来源:Douglas Crockford 在 G+ 上的公开声明


JSON 不支持注释。它也从未打算用于需要注释的配置文件。

Hjson 是人类的配置文件格式。宽松的语法,更少的错误,更多的评论。

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 的语法在该页面上可视化。没有任何关于评论的说明。

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部