gpt4 book ai didi

json - 如何使用 Jackson API(列表中的列表)迭代 JSON 响应?

转载 作者:行者123 更新时间:2023-12-04 16:44:33 24 4
gpt4 key购买 nike

如何使用 Jackson API 在 Java 中迭代 JSON 响应?换句话说,如果响应有一个列表并且在该列表中是另一个列表(在本例中称为“天气”),则 我如何获得温度 ?

这是我尝试迭代的示例:

{
"message":"like",
"cod":"200",
"count":3,
"list":[
{
"id":2950159,
"name":"Berlin",
"coord":{
"lon":13.41053,
"lat":52.524368
},
"weather":[
{
"id":804,
"main":"Clouds",
"description":"overcast clouds",
"temp":74
}
]
},
{
"id":2855598,
"name":"Berlin Pankow",
"coord":{
"lon":13.40186,
"lat":52.56926
},
"weather":[
{
"id":804,
"main":"Clouds",
"description":"overcast clouds",
"temp":64
}
]
}
]
}

这是我尝试使用的代码,它不起作用,因为我只能遍历第一项:
try {                
JsonFactory jfactory = new JsonFactory();
JsonParser jParser = jfactory.createJsonParser( new File("test.json") );

// loop until token equal to "}"
while ( jParser.nextToken() != JsonToken.END_OBJECT ) {

String fieldname = jParser.getCurrentName();

if ( "list".equals( fieldname ) ) { // current token is a list starting with "[", move next
jParser.nextToken();
while ( jParser.nextToken() != JsonToken.END_ARRAY ) {
String subfieldname = jParser.getCurrentName();
System.out.println("- " + subfieldname + " -");
if ( "name".equals( subfieldname ) ) {
jParser.nextToken();
System.out.println( "City: " + jParser.getText() ); }
}
}

}
jParser.close();

} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("-----------------");

最佳答案

当 jackson 打算为您解析时,您正在解析 JSON。不要对自己这样做。
一种选择是创建一个与您的 JSON 格式匹配的 DTO ( Data Transfer Object )

class Root {
private String message;
private String cod;
private int count;
private List<City> list;
// appropriately named getters and setters
}

class City {
private long id;
private String name;
private Coordinates coord;
private List<Weather> weather;
// appropriately named getters and setters
}

class Coordinates {
private double lon;
private double lat;
// appropriately named getters and setters
}

class Weather {
private int id;
private String main;
private String description;
private int temp;
// appropriately named getters and setters
}
然后使用 ObjectMapper并反序列化 JSON 的根。
ObjectMapper mapper = new ObjectMapper();
Root root = mapper.readValue(yourFileInputStream, Root.class);
然后你可以得到你想要的字段。例如
System.out.println(root.getList().get(0).getWeather().get(0).getTemp());
打印
74
另一种方法是将您的 JSON 读入 JsonNode并遍历它,直到获得所需的 JSON 元素。例如
JsonNode node = mapper.readTree(new File("text.json"));
System.out.println(node.get("list").get(0).get("weather").get(0).get("temp").asText());
也打印
74

关于json - 如何使用 Jackson API(列表中的列表)迭代 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20832015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com