2015-11-24 120 views
-1

我有这样的疑问:
在文件中我有多个JSON行这样JSON路径读取

{"id":1,"my_struct":{"other_id":1,"text":"HelloWorld0"}} 
{"id":2,"my_struct":{"other_id":12,"text":"HelloWorld1"}} 
{"id":3,"my_struct":{"other_id":123,"text":"HelloWorld2"}} 

我试图让使用JSON路径查询数据:

&.id 

和我得到空线。
但是,如果我在文件中使用相同的JSON路径查询只用一条线

{"id":1,"my_struct":{"other_id":1,"text":HelloWorld0}} 

我得到正确的结果:1
我做错了吗?我怎样才能得到所有的ID?

+0

该文件无效JSON。你必须指定使用哪一行。 – Biffen

+0

是否可以迭代所有JSON行? – UNIm95

+0

呃,'* JSON行*'是什么意思呢?如果每一行都是有效的JSON,那么是的,可以遍历行,并使用您最喜欢的工具来完成这些任务。 – Biffen

回答

1

根据你的例子,这是不正确的JSON格式。实际上,你可以验证JSON或在这个在线工具生成JSON:http://www.jsoneditoronline.org/

请在这里的例子阅读更多细节JsonPath:https://github.com/jayway/JsonPath#user-content-path-examples

为了使您的JSON有效的,它应该是这种格式:

[ 
    {"id":1,"my_struct":{"other_id":1,"text": "HelloWorld0 Value"}}, 
    {"id":2,"my_struct":{"other_id":12,"text": "HelloWorld1 Value"}}, 
    {"id":3,"my_struct":{"other_id":123,"text": "HelloWorld2 Value"}} 
] 

要回答你如何让所有的ID,将使用"$.[*].id"问题。

+0

该死的。你是对的。当我用[]包围这一切,并添加逗号“$。[*] .id”开始工作。是否有可能在不重写的情况下读取文件(不添加[,]和)? – UNIm95

+1

@ UNIm95简短的回答是肯定的,这是可能的。您只需从文件中读取每行的JSON对象,然后通过将数组中的字符串推入并转换来以编程方式创建正确的格式。仍然在JSON结构中添加括号和逗号很重要,因为它是由JSON构成的。 – vincent