【发布时间】:2019-02-21 17:12:42
【问题描述】:
我正在尝试读取 Java 中 JSON 数组的内容,并将每个元素作为 JSON 字符串获取。我的尝试失败了。
假设这里是基本 JSON:
{ "book": [
{ "category": "",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": ""
},
{ "category": "fiction",
"author": "",
"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
}
]
}
我遍历整个数组,需要将每个元素作为 JSON 字符串获取(某些属性可以为空)。所以第一个字符串是:
{ "category": "",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": ""
}
我做的是这样的:
String response = Unirest.get(db).header("cache-control", "no-cache").asString().getBody();
int length = JsonPath.read(response, "$.book.length()");
System.out.println(length);
for (int i = 0; i < length; i++) {
String json = JsonPath.read(response, "$.book["+i+"]").toString();
System.out.println("1111111\n"+json);
process(json);
}
但我得到的是凌乱的,而不是相同的字符串。它不包括""。
解决办法是什么?
【问题讨论】:
-
你试过了吗? -> stackoverflow.com/questions/1568762/…
-
好吧,那不是
JSONPath。此时最好不要更改库。 -
您好,您应该提供更多上下文,有无数种不同的方式来读取 Json,所以,请首先向我们展示您使用的是哪个库(JsonPath?)以及您是什么结果(你所说的混乱是什么)。这将有助于我们识别您的问题并为您提供更好的帮助。仅供参考,我以前从未使用过这个 JsonPath...
-
JSONPath 很直观,所以到目前为止我一直在使用它。好吧,@MiguelCruz 建议的那个有效,所以不用再费心使用 JSONPath 了!
-
我刚刚在这里测试了您的代码,它确实按“预期”工作。您正在使用一个读取 json 的库,因此它将响应一个类似 json 的对象,因此不需要值中的双引号。例如,如果您添加代码
String json = JsonPath.read(response, "$.book["+i+"].category").toString(),它将为第一个打印空白,为所有其他打印虚构...如果您希望它实际将其打印为新的 json 对象,您需要为您的阅读提供特定的配置方法。刚刚通过阅读文档了解到它:)
标签: java json jsonpath jsonparser