我正在使用Jackson来解析api结果,这似乎很好。
Java:
public static void jsonIn(String st){
try {
JsonFactory jfactory = new JsonFactory();
/*** read from URL ***/
JsonParser jParser = jfactory.createJsonParser(new URL(st));
// loop until token equal to "}"
while (jParser.nextToken() != JsonToken.END_ARRAY) {
String fieldname = jParser.getCurrentName();
if ("id".equals(fieldname)) {
// current token is "id",
// move to next, which is "id"'s value
try{
jParser.nextToken();
}
catch (Exception e){
}
System.out.println(jParser.getText()); // display id
}
}
jParser.close();
} catch (JsonGenerationException e) {
e.printStackTrace();
}
}
问题:
但是-我想要的结果(字段:"id")在数组"items“中。上面的代码从第一个数组“查询”开始,只发送给我一个名为"id“的元素,我不关心这个元素。然后,它将停止基于while语句的解析,而不会到达"items“数组。如何更改上面的代码以跳过我感兴趣的数组"items“,以便获得我想要的"id”字段?
json:
{
"app": "Sale",
"avail": {
"type": "application/json",
},
"queries": {
"unAvailURIs": [
{
"id": "1sdf6gf3jf80dhb3",
"results": "57",
"searchTerms": "lycos.com",
"startIndex": 11
}
],
"apiSource": [
{
"title": "go****y",
"totalResults": "579000",
"auctionPhrase": "lycos.com",
"count": 10,
"startIndex": 1,
"id": "in",
}
]
},
"pullAPI": {
"search": "lycos.com"
},
"searchInformation": {
"searchTime": 0.025345,
"totalResults": "57600100",
},
"items": [
{
"id": "GD172993",
"title": "lycos.com",
....
发布于 2013-01-18 04:03:44
我好像错过了我要找的那个帖子:Parsing JSON Bing results with Jackson。感谢@fge解释ObjectMapper
和readTree()
。
我只是简单地替换了try
语句的开头,如下所示:
try {
JsonFactory jfactory = new JsonFactory();
JsonParser jParser = jfactory.createJsonParser(new URL(st));
ObjectMapper mapper = new ObjectMapper();
JsonNode input = mapper.readTree(jParser);
final JsonNode results = input.get("items");
// loop until token equal to "}"
for (final JsonNode element: results) {
JsonNode fieldname = element.get("id");
System.out.println(fieldname.toString());
https://stackoverflow.com/questions/14391568
复制相似问题