用 Java 解析 JSON 双括号
Parsing JSON double brackets with Java
我遇到了一些麻烦,因为我在学习如何使用 json 简单地解析 JSON 时遇到了障碍。
为了让自己简洁;
我正在尝试从 url
中解析 JSON 的这一点
"hourly": {
"summary": "Clear throughout the day.",
"icon": "clear-day",
"data": [
{
"time": 1550379600,
"summary": "Clear",
"icon": "clear-day",
"precipIntensity": 0,
"precipProbability": 0,
"temperature": 20.18,
"apparentTemperature": 14.31,
"dewPoint": 13.79,
"humidity": 0.76,
"pressure": 1024.47,
"windSpeed": 4.08,
"windGust": 5.25,
"windBearing": 30,
"cloudCover": 0.07,
"uvIndex": 0,
"visibility": 10,
"ozone": 342.67
}
所以,使用 json 很简单,这就是我解析这个 JSON
的方式
try{
String genreJson = IOUtils.toString(new URL(url));
JSONObject genreJsonObject = (JSONObject) JSONValue.parseWithException(genreJson);
//get the title
System.out.println(genreJsonObject.get("hourly")); //THIS WORKS
//System.out.println(genreJsonObject.get("visibility"));
//get the data
JSONArray genreArray = (JSONArray) genreJsonObject.get(0);
//get the first genre
//JSONObject firstGenre = (JSONObject) genreArray.get(0);
//System.out.println(firstGenre.get("data"));
}
catch (IOException | ParseException e){
e.printStackTrace();
}
因此,在调用 System.out.println(genreJsonObject.get("hourly"));
时,我得到了标题为 "hourly" 的括号内的所有内容。我的意图是解析 "hourly" 括号内的数据,尽管我不知道如何解析带标题的括号内的标题。具体来说,我需要时间、precipProbability、precipIntensity 和 precipProbability(此属性不在示例中)。
对于任何缺乏细节,我深表歉意,因为我这样做是我第一次编程马拉松的一部分,我现在正努力不睡着。
非常感谢任何人的帮助。
这是描述您的 json "data" 部分的对象:
class Data {
private Long time;
private String summary;
private String icon;
private Double dewPoint;
// add all the fields you need
// add empty constructor + getters and setters
}
如果您想跳过 "data" 中您不关心的某些字段,请使用
@JsonIgnoreProperties(ignoreUnknown = true)
class Data{
...
}
您的父对象是 "hourly",因此:
class Hourly {
private String summary;
private String icon;
private List<Data> data;
// add all the fields you need
// add empty constructor + getters and setters
}
此时 Java POJO 类 描述了 Json 数据,因此您已准备好将 JSON 映射到 Java 类.
要与 Jackson 一起阅读本文,您将需要 Json 的字符串表示形式(没有任何 URL 部分),因此假设您可以在名为 [=29= 的字符串中完成此操作].
与 Jackson 一起阅读这篇文章将非常简单:
ObjectMapper mapper = new ObjectMapper();
Hourly hourly = mapper.readValue(inputJsonString, Hourly.class);
我遇到了一些麻烦,因为我在学习如何使用 json 简单地解析 JSON 时遇到了障碍。
为了让自己简洁;
我正在尝试从 url
中解析 JSON 的这一点"hourly": {
"summary": "Clear throughout the day.",
"icon": "clear-day",
"data": [
{
"time": 1550379600,
"summary": "Clear",
"icon": "clear-day",
"precipIntensity": 0,
"precipProbability": 0,
"temperature": 20.18,
"apparentTemperature": 14.31,
"dewPoint": 13.79,
"humidity": 0.76,
"pressure": 1024.47,
"windSpeed": 4.08,
"windGust": 5.25,
"windBearing": 30,
"cloudCover": 0.07,
"uvIndex": 0,
"visibility": 10,
"ozone": 342.67
}
所以,使用 json 很简单,这就是我解析这个 JSON
的方式try{
String genreJson = IOUtils.toString(new URL(url));
JSONObject genreJsonObject = (JSONObject) JSONValue.parseWithException(genreJson);
//get the title
System.out.println(genreJsonObject.get("hourly")); //THIS WORKS
//System.out.println(genreJsonObject.get("visibility"));
//get the data
JSONArray genreArray = (JSONArray) genreJsonObject.get(0);
//get the first genre
//JSONObject firstGenre = (JSONObject) genreArray.get(0);
//System.out.println(firstGenre.get("data"));
}
catch (IOException | ParseException e){
e.printStackTrace();
}
因此,在调用 System.out.println(genreJsonObject.get("hourly"));
时,我得到了标题为 "hourly" 的括号内的所有内容。我的意图是解析 "hourly" 括号内的数据,尽管我不知道如何解析带标题的括号内的标题。具体来说,我需要时间、precipProbability、precipIntensity 和 precipProbability(此属性不在示例中)。
对于任何缺乏细节,我深表歉意,因为我这样做是我第一次编程马拉松的一部分,我现在正努力不睡着。
非常感谢任何人的帮助。
这是描述您的 json "data" 部分的对象:
class Data {
private Long time;
private String summary;
private String icon;
private Double dewPoint;
// add all the fields you need
// add empty constructor + getters and setters
}
如果您想跳过 "data" 中您不关心的某些字段,请使用
@JsonIgnoreProperties(ignoreUnknown = true)
class Data{
...
}
您的父对象是 "hourly",因此:
class Hourly {
private String summary;
private String icon;
private List<Data> data;
// add all the fields you need
// add empty constructor + getters and setters
}
此时 Java POJO 类 描述了 Json 数据,因此您已准备好将 JSON 映射到 Java 类.
要与 Jackson 一起阅读本文,您将需要 Json 的字符串表示形式(没有任何 URL 部分),因此假设您可以在名为 [=29= 的字符串中完成此操作].
与 Jackson 一起阅读这篇文章将非常简单:
ObjectMapper mapper = new ObjectMapper();
Hourly hourly = mapper.readValue(inputJsonString, Hourly.class);