Разбор JSON двойных скобок с Java - PullRequest
0 голосов
/ 17 февраля 2019

У меня возникли некоторые проблемы, так как я столкнулся с препятствием на пути изучения синтаксического анализа JSON с помощью json simple.

Для краткости;

Я пытаюсь разобрать этот битJSON из URL

"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 simple я анализирую этот 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")); я получаю все в пределахскобки под названием «почасовая».Мое намерение состоит в том, чтобы проанализировать данные в пределах «почасовой» скобки, хотя я не могу понять, как анализировать заголовок в пределах названной скобки.В частности, мне нужно время, degProbability, deposIntensity и deposProbability (этот атрибут отсутствует в примере).

Я прошу прощения за отсутствие подробностей, поскольку я делаю это как часть моего первого хакатона, иЯ пытаюсь не уснуть прямо сейчас.

Я очень ценю чью-либо помощь.

1 Ответ

0 голосов
/ 17 февраля 2019

Это объект для описания вашей части данных «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.

Чтобы прочитать это с Джексоном, вам понадобится строковое представление Json (без каких-либо частей URL), поэтому давайте предположим, что вы можете сделать это в строке с именем "inputJsonString".

Чтение этогос Джексоном будет так же просто, как:

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