我有一个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解析?
我无法想象一个 “由其他程序自动创建” 的json文件将在其中包含注释。因为json规范根本没有定义任何注释,而这是设计使然,所以没有json库将输出带有注释的json文件。
这些评论通常是由人后来添加的。在这种情况下也不例外。OP在他的帖子中提到://"birthday": "nothing" //I comment this line。
//"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分析器。
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…,您会明白。
[1,2,3,/* a comment */ 10]
[1, 2, 3] # a comment
[1, 2, 3] ; a comment
我仍然建议首先不要在JSON中添加不兼容的注释。