如果深度嵌套的JSON在java中有不确定的嵌套,我如何遍历它?
例如,我有以下JSON:如果深度嵌套的JSON在java中有不确定的嵌套,我如何遍历它?,java,json,Java,Json,例如,我有以下JSON: { "field1": "value1", "field2: "value2", "array1" : [ "field1": "value1", "field2: "value2", "array1" : [ "field1": "value1",
{
"field1": "value1",
"field2: "value2",
"array1" : [
"field1": "value1",
"field2: "value2",
"array1" : [
"field1": "value1",
"field2: "value2",
]
]
}
它可以有更多或嵌套在同一格式的内部,如何使用递归遍历它
好吧,看起来我有点困惑,json可能是上面的那个,或者像下面这个,在增加“巢穴”的过程中,比如那个俄罗斯娃娃:
{
"field1": "value1",
"field2: "value2",
"array1" : [
"field1": "value1",
"field2: "value2",
"array1" : [
"field1": "value1",
"field2: "value2",
"array1" : [
"field1": "value1",
"field2: "value2",
]
]
]
}
假设您使用Jackson或Gson,您可以定义一个POJO,您可以像其他任何对象一样解析和迭代它
public class Foo {
String field1, field2;
List<Foo> array1;
public static void traverse(Foo f) {
if (f.array1 == null) return;
// do something for current object
for (Foo next : f.array1) traverse(next);
// do something after visiting all children
}
}
公共类Foo{
字符串字段1,字段2;
列表1;
公共静态无效遍历(Foo f){
if(f.array1==null)返回;
//为当前对象执行某些操作
对于(Foo-next:f.array1)遍历(next);
//看完所有的孩子后做点什么
}
}
方法#0
将JSON转换为POJO并利用库,您可以从POJO迭代任何对象
方法#1
请不要重新发明轮子,因为有许多库是由许多贡献者创建和改进的
请利用
通过使用下面的代码,您可以访问下面这样的复杂json
您可以使用迭代器遍历下面的列表
// get first author
String author0 = JsonPath.read(document, "$.store.book[0].author");
// get all titles
List<String> titles = JsonPath.parse(JSON_DOCUMENT).read("$.store.book[*].title", typeRef);
您正在使用哪个json库?大多数人都有一种方法来检查一个值是对象还是arrayHi Cricket,我在库中使用的是org json?它还没有结束吗?或者它是一个正在增长的json?如果您的问题涉及不断增长的json,那么,在我看来,“json上的迭代”的观点是不正确的,您最好使用流APIinstead@forkdbloke,它结束了,我的意思是要处理的json可能有随机数的“嵌套”,这取决于发送给我的数据。因此,在这种情况下,我建议使用JSONPath(如我的答案中的方法#1所建议的),因为您需要对具有未知元素的结构化json进行随机访问,并且仍然能够进行迭代。这如何帮助访问无限深的数组?当你说无限时,你需要知道每个点的索引,你真正的意思是什么?它还没有结束吗?或者它是一个不断增长的json?我不确定。阅读问题。。。“它可能有更多或嵌套在同一格式的内部”如果您的问题涉及不断增长的json,那么,在我看来,“json上的迭代”的观点是不正确的,您最好使用流api。好吧,流api不会递归嵌套对象。它们必须被夷为一片
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}