2012-07-24 65 views
5

如果我有,其内容看起来像一个文件:如何读取包含多个根元素的JSON文件?

{"one": 1} 
{"two": 2} 

我可以简单地分析每个单独行作为一个单独的JSON对象(使用JsonCpp)。但是,如果该文件的结构是这样不太方便:

{ 
    "one":1 
} 

{ 
    "two":2 
} 
+0

相关问题:[如何使用Jackson ObjectMapper检测尾随垃圾](http://stackoverflow.com/questions/26003171/how-to-detect-trailing-garbage-using-jackson-objectmapper) – sleske 2016-04-01 13:06:20

回答

5

你的问题也不例子是一个有效的JSON对象;一个JSON对象可能只有一个根。你必须将文件分成两个对象,然后解析它们。

您可以使用http://jsonlint.com来查看给定的字符串是否为有效的JSON。

因此,我建议更改将多个JSON对象转储到单个文件中以在单独的文件中执行此操作,或者将每个对象作为值放入一个JSON根对象中。

如果您无法控制创建这些内容的任何内容,那么您会自己解析文件以挑选出不同的根对象。

下面是一个JSON对象的数据进行编码的有效途径:

{ 
    "one": 1, 
    "two": 2 
} 

,或者如果你真的需要单独的对象,像这样:

{ 
    "one": 
    { 
     "number": 1 
    }, 
    "two": 
    { 
     "number": 2 
    } 
} 
+1

第一个示例isn也不是有效的对象,这是问题的关键。 – 2012-07-24 22:00:41

+1

对不起,我应该提到我们应该假定我无法控制文件的格式。 – Tshepang 2012-07-24 22:05:55

+2

我不知道将处理多个根对象的JSON解析器(也许有人可以纠正我),所以您可能会坚持解析来计算匹配{}以查找根对象的位置。 – Almo 2012-07-24 22:08:17

2

罗伯肯尼迪是正确的。再次调用它会提取下一个对象,依此类推。json lib的大部分内容无法帮助您在单个根目录中完成所有操作。除非你在QT中使用更高端的框架。

+0

其中QT框架是 – Tshepang 2012-12-05 08:08:24

+0

是的,'jsoncpp'按R.Kennedy的描述工作。 – cdunn2001 2015-02-17 05:32:48