但是如果我试图获得一个数组,它只会返回第一个元素 的 JSON
{"foo":
{"bar":
{"foobar":{
"items":["item1","item2","item3"]
}
}
}
}
如果我使用keyFinder的例子并搜索“items”,我只能获得“item1”,而我希望能够使用整个数组。
keyFinder的功能示例/工作原理:
KeyFinder finder = new KeyFinder();
finder.setMatchKey("items");
try{
while(!finder.isEnd()){
if(finder.isFound)
System.out.println("finder.getValue() -->" + finder.getValue()
}
}//...
我目前的工作方式:
Object obj = parser.parse(jsonText);
JSONObject jsonObject = (JSONObject) obj;
JSONObject jsonTags = (JSONObject) ((JSONObject) ((JSONObject) jsonObject.get("foo")).get("bar")).get("foobar");
String tags = (String) jsonTags.get("items").toString().replaceAll("[^A-Za-z0-9,]","");
String[] vaca = tags.split(",");
for(String s : vaca) {
list.add(s);
System.out.println(s);
}
我的问题是如何在不知道“path”的情况下获取数组foo>> bar>> foobar通过其键获取“items”数组。
答案 0 :(得分:0)
它会给你完整的数组。你犯的一个错误是你没有在foo
中包裹bar
,foobar
和""
。它应该是这样的:
{"foo":
{"bar":
{"foobar":{
"items":["item1","item2","item3"]
}
}
}
}
我尝试了你的代码
JSONParser parser = new JSONParser();
Object obj = parser.parse(jsonText);
JSONObject jsonObject = (JSONObject) obj;
JSONObject jsonTags = (JSONObject) ((JSONObject) ((JSONObject) jsonObject.get("foo")).get("bar")).get("foobar");
String tags = (String) jsonTags.get("items").toString().replaceAll("[^A-Za-z0-9,]","");
String[] vaca = tags.split(",");
List<String> list = new ArrayList<>();
for(String s : vaca) {
list.add(s);
System.out.println(s);
}
输出是:
item1
item2
item3