Обобщение значений поиска в JSONObject?

У меня довольно разнообразная структура JSONObject. Я использую json.simple для получения таких значений от объекта:

String val1 = ((LinkedHashMap<String, String>) response.get("key1")).get("inner_key1");
String val2 = ((LinkedHashMap<String, String>) response.get("key1")).get("inner_key2");
int index1 = (int) ((ArrayList) response.get("index_key1")).get(0);
int index2 = (int) ((ArrayList) response.get("index_key2")).get(0);
int index3 = (int) ((ArrayList) response.get("index_key3")).get(0);

Мне интересно, могу ли я использовать служебный метод, чтобы получить эти значения более универсальным способом? Кроме того, я бы тоже хотел избежать этого кастинга, есть ли для этого какое-то решение?

Как вы используете свой JSONObject? Всегда ли вы используете одни и те же поля, даже если JSONObject имеет разную структуру?

Yug Singh 06.10.2018 20:37

Можете ли вы хранить некоторую информацию о типе в json?

Charles 06.10.2018 20:38

@YugSingh Именно так я использую свой JSONObject, как вы можете видеть в примере. Ключи всегда одни и те же, но значения, конечно, нет.

Twi 06.10.2018 20:46

@Charles Нет, я не могу ничего сохранить в "ответе". Я получаю этот JSON с сервера.

Twi 06.10.2018 20:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поскольку ключи в JSON всегда одинаковы, вы можете создать класс и указать ключи как переменные экземпляра. Теперь вы можете использовать Jackson library's Object Mapper для преобразования JSON string в JSON Object, как показано в приведенном ниже коде.

public class Vehicle{
private String brand = null;
private int doors = 0;

public String getBrand() { return this.brand; }
public void   setBrand(String brand){ this.brand = brand;}

public int  getDoors() { return this.doors; }
public void setDoors (int doors) { this.doors = doors; }
}

В качестве основной функции вы можете написать следующий код:

ObjectMapper objectMapper = new ObjectMapper();

String carJson =
"{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";

try {
Vehicle vehicle= objectMapper.readValue(carJson, Vehicle.class);

System.out.println("car brand = " + vehicle.getBrand());
System.out.println("car doors = " + vehicle.getDoors());
} catch (IOException e) {
e.printStackTrace();
}

Кроме того, при использовании способа Object Mapper вам не нужно выполнять кастинг. Подробнее об этом можно прочитать здесь.

Вы можете использовать библиотеку GSON, предоставленную Google, для сопоставления JSON с Java.

Пример,

public class Example {

  private String val1;
  private String val2;
  private ArrayList<int> index_key1;
  private ArrayList<int> index_key2;
  private ArrayList<int> index_key3;

  ///
  //  Getter Methods
  ///

  public String getVal1() { return val1; }
  public String getVal2() { return val2; }
  public int getIndex1() { return index_key1.get(0); }
  public int getIndex2() { return index_key2.get(0); }
  public int getIndex3() { return index_key3.get(0); }
}

потом

  Example ex = new Gson().fromJson(response.toString(), Example .class);  

После этого все будет в порядке. Также существует библиотека Jackson, которая предоставляет решение, аналогичное GSON.

Другие вопросы по теме