【问题标题】:Parsing JSON double brackets with Java用Java解析JSON双括号
【发布时间】:2019-07-10 21:03:55
【问题描述】:

我遇到了一些麻烦,因为我在学习如何用简单的 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")); 时,我得到了标题为“每小时”的括号内的所有内容。我的意图是解析“每小时”括号内的数据,尽管我不知道如何解析带标题的括号内的标题。具体来说,我需要时间、precipProbability、precipIntensity 和 precipProbability(示例中没有这个属性)。

对于任何缺乏细节,我深表歉意,因为这是我第一次黑客马拉松的一部分,而且我现在正努力避免睡着。

非常感谢任何人的帮助。

【问题讨论】:

  • 如果你创建一个Java POJO并将Json映射到Java类(例如使用Jackson),然后在Java类上调用相应的方法,不是更简单吗?
  • 我会调查一下并试一试

标签: java json api parsing weather-api


【解决方案1】:

这是描述您的 json“数据”部分的对象:

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
}

如果您想跳过“数据”中您不关心的某些字段,请使用

@JsonIgnoreProperties(ignoreUnknown = true)
class Data{ 
   ...
}

你的父对象是“每小时”的,所以:

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 部分),因此假设您可以在名为“inputJsonString”的字符串中执行此操作。

与杰克逊一起阅读本文将非常简单:

ObjectMapper mapper = new ObjectMapper();
Hourly hourly = mapper.readValue(inputJsonString, Hourly.class);

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    相关资源
    最近更新 更多