当前位置: 首页 > 面试题库 >

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

杜苏燕
2023-03-14
问题内容

我有一个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库将输出带有注释的jsonhtml" target="_blank">文件。

这些评论通常是由人后来添加的。在这种情况下也不例外。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中添加不兼容的注释。



 类似资料:
  • 问题内容: 我有一个非常简单的JSON,其中包含产品评论,例如: 我想使用GSON将其读入我的Java应用程序中。我建立了一个类来保存每个评论的结果: 要读取JSON文件,我的代码是: 使用此代码,我只能在JSON中检索第一个评论,所以我的问题是:如何遍历所有读者并获得下一个评论?我不需要将评论存储在列表中,只需要访问对象一次。任何帮助都超过了欢迎。 问题答案: 您必须获取列表中的全部数据,然后再

  • 问题内容: 我试图使用PHP解析JSON文件。但是我现在被困住了。 这是我的JSON文件的内容: 到目前为止,这是我尝试过的: 但是,因为我不知道的名字(例如,)和所有可用键和值(如,)事前,我想我需要创建一些foreach循环。 我希望为此举一个例子。 问题答案: 要遍历多维数组,可以使用RecursiveArrayIterator 输出:

  • 问题内容: 我正在尝试找到一种用C解析JSON的好方法。我真的不需要庞大的库或任何东西,我宁愿拥有体积小,重量轻,功能最少的东西,但有很好的文档。 有人有什么可以指点我的吗? 问题答案: Json并不是一门强大的语言,因此它的库可能很小(至少比Xml库要小)。 有一个整体吨C中的Json.org库链接。也许其中之一会很适合您。

  • 问题内容: 我刚刚在此处阅读了一个新问题,询问的标题与我的基本相同。那让我开始思考-并在网络上搜索(当然,大多数点击都指向SO;)。所以我认为 - 应该有一个简单的正则表达式,能够从任何代码中删除C样式的注释。 是的,关于SO的这个问题/陈述有答案,但是我发现的答案都是不完整和/或过于复杂。 因此,我开始进行实验,并提出了一个可以在 我 能想象的所有类型的代码上运行的代码: 第一种选择检查 双斜杠

  • 我有一个非常简单的产品评论JSON,比如: 我想用GSON把它读到我的Java应用程序中。我构建了一个类来保存每次复习的结果: 使用这段代码,我只能检索JSON中的第一个评论,所以我的问题是:如何遍历所有阅读器并获得下一个评论?我不需要将评论存储在列表中,只需要访问对象一次。任何帮助都大于欢迎。

  • 问题内容: 到目前为止,我的目标是在Rust中解析此JSON数据: 并且是 我下一步应该解析什么?我的主要目标是获取这样的JSON数据,并从其中解析密钥(例如Age)。 问题答案: Serde是首选的JSON序列化提供程序。您可以通过多种方式从文件中读取JSON文本。将其作为字符串使用后,请使用: Cargo.toml: 您甚至可以使用类似的方法直接从已打开的读取。 Serde可以用于JSON以外