一尘不染

如何使用C样式注释解析json文件?

json

我有一个json文件,如下所示:

    { 
       "author":"John",
       "desc": "If it is important to decode all valid JSON correctly \ 
and  speed isn't as important, you can use the built-in json module,   \
 orsimplejson.  They are basically the same but sometimes simplej \
further along than the version of it that is included with \
distribution."
       //"birthday": "nothing" //I comment this line
    }

该文件是由另一个程序自动创建的。如何使用Python解析?


阅读 213

收藏
2020-07-27

共1个答案

一尘不染

我无法想象一个 “由其他程序自动创建”
的json文件将在其中包含注释。因为json规范根本没有定义任何注释,而这是设计使然,所以没有json库将输出带有注释的json文件。

这些评论通常是由人后来添加的。在这种情况下也不例外。OP在他的帖子中提到://"birthday": "nothing" //I comment this line

因此,真正的问题应该是,如何正确注释json文件中的某些内容,同时又保持其与规范的兼容性并因此与其他json库兼容?

答案是,将您的字段重命名为另一个名称。例:

{
    "foo": "content for foo",
    "bar": "content for bar"
}

可以更改为:

{
    "foo": "content for foo",
    "this_is_bar_but_been_commented_out": "content for bar"
}

这在大多数情况下都可以正常工作,因为使用者很可能会忽略意外字段(但并非总是如此,这取决于json文件使用者的实现。因此,YMMV。)

更新
:显然有些读者不满意,因为此答案并未给出他们期望的“解决方案”。好吧,事实上,我确实提供了一个可行的解决方案,方法是隐式链接到JSON设计器的quote

Douglas Crockford公开2012年4月30日以JSON格式发表评论

我从JSON中删除了注释,因为我看到人们正在使用它们保留解析指令,这种做法会破坏互操作性。我知道缺少评论会使某些人感到难过,但事实并非如此。

假设您正在使用JSON保留要注释的配置文件。继续并插入您喜欢的所有评论。然后将其通过JSMin传递给JSON分析器。

所以,是的,继续使用JSMin。请记住,当您走向“在JSON中使用注释”时,这在概念上是未知的领域。不能保证您选择的任何工具都可以处理:内联[1,2,3,/* a comment */ 10],Python样式[1, 2, 3] # a comment(这是Python中的注释,而不是Javascript中的注释),INI样式[1, 2, 3] ; a comment…,您会明白。

我仍然建议首先不要在JSON中添加不兼容的注释。

2020-07-27