使用Java读取JSON中的嵌套键的值(Jackson)
我是来自Python的新Java程序员。我有正在收集/返回为带有嵌套键的JSON的天气数据,而且我不了解在这种情况下如何提取值。我敢肯定这个问题已经被问过了,但是我发誓我已经用Google搜索了很多东西,但是我似乎找不到答案。现在我正在使用json-
simple,但我尝试切换到Jackson,但仍然不知道如何执行此操作。由于Jackson /
Gson似乎是使用最频繁的库,因此,我很想看看使用其中一个库的示例。下面是数据示例,后面是我到目前为止编写的代码。
{ "response": {
"features": {
"history": 1
}
},
"history": {
"date": {
"pretty": "April 13, 2010",
"year": "2010",
"mon": "04",
"mday": "13",
"hour": "12",
"min": "00",
"tzname": "America/Los_Angeles"
},
...
}
}
主功能
public class Tester { public static void main(String args[]) throws MalformedURLException, IOException, ParseException {
WundergroundAPI wu = new WundergroundAPI("*******60fedd095");
JSONObject json = wu.historical("San_Francisco", "CA", "20100413");
System.out.println(json.toString());
System.out.println();
//This only returns 1 level. Further .get() calls throw an exception
System.out.println(json.get("history"));
}
}
函数’historical’调用另一个返回JSONObject的函数
public static JSONObject readJsonFromUrl(URL url) throws MalformedURLException, IOException, ParseException { InputStream inputStream = url.openStream();
try {
JSONParser parser = new JSONParser();
BufferedReader buffReader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
String jsonText = readAll(buffReader);
JSONObject json = (JSONObject) parser.parse(jsonText);
return json;
} finally {
inputStream.close();
}
}
回答:
使用Jackson的树模型(JsonNode
),您既有“文字”访问器方法(“ get”)null
和“安全”访问器(“
path”),“访问”方法返回缺失值,又有“安全”访问器(“ path”),它们使您可以遍历“缺失”节点。因此,例如:
JsonNode root = mapper.readTree(inputSource);int h = root.path("response").path("history").getValueAsInt();
它将返回给定路径的值,或者,如果缺少路径,则返回0(默认值)
但是更方便的是,您可以只使用JSON指针表达式:
int h = root.at("/response/history").getValueAsInt();
还有其他方法,通常将结构建模为普通旧Java对象(POJO)更为方便。您的内容可能适合以下内容:
public class Wrapper { public Response response;
}
public class Response {
public Map<String,Integer> features; // or maybe Map<String,Object>
public List<HistoryItem> history;
}
public class HistoryItem {
public MyDate date; // or just Map<String,String>
// ... and so forth
}
如果是这样,您将遍历结果对象,就像处理任何Java对象一样。
以上是 使用Java读取JSON中的嵌套键的值(Jackson) 的全部内容, 来源链接: utcz.com/qa/405187.html