Извлечение данных из ключей в объекте JSON

#java #json #spring-boot

Вопрос:

Я получаю такой ответ, как

 [
   
      {
         "externalId1":"NULL",
         "externalId2":"NULL"
      }
   ,
   
      {
         "externalId1":"NULL",
         "externalId2":"NULL"
      }
   
]
 

и этот ответ хранится в List<String> имени переменной response1 .

Я хочу извлечь значение externalId1 и externalId2 и сохранить его в списке

Код, который я написал, приведен ниже:

//response1-это список, в котором хранится массив ответов, и массив ответов уже написан выше.

Однако после этого возникает исключение, так как это не JSONObject. Цикл не извлекает необходимые данные. В идеале значения обоих ключей externalId1 и externalId2 должны были быть напечатаны. Но цикл продолжает выдавать исключение и, следовательно, говорит «НЕ JSONObject».

 List<String> response1 = new ArrayList<String>();
JSONArray jsonArray = new JSONArray(response1);

for (int i=0; i<array.length(); i  )
{
  JSONObject object = jsonArray.getJSONObject(i);
  System.out.println(object.getString("externalId1");
  System.out.println(object.getString("externalId2");
}
 

Изменить:Я изменил ответ, который получил, внеся изменения в код на своей машине после отзывов нескольких пользователей о stackoverflow.

Комментарии:

1. В вашем примере JSON у вас есть массив массива .

2. В JSON: [ ] представляет список/массив, { } представляет объект. Структура, подобная [ [ { } ] ] массиву, содержащему массив, содержащий объект. Я не совсем понимаю, откуда вы List<String> взялись..

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

4. Просто добавьте дополнительную операцию, чтобы сначала получить внутренний массив, а затем извлечь объект из него

5. Спасибо Гаэлю Джею , теперь я изменил сам ответ , теперь это единый массив с объектами, и он хранится в списке типов<Строка>, затем я сделал тот же код, который есть в описании, но я не могу извлечь информацию

Ответ №1:

На мой взгляд, лучший способ-это реализовать класс DTO. Например:

 public class ExternalId {
   private String externalId1;
   private String externalId2;
}

@PostMapping("/test")
public void parseJsonExample(@RequestBody List<List<ExternalId>> requestBody) {
  //do whatever you want on your list objects
}
 

Комментарии:

1. Нужно обойтись без DTO, но потому, что мне нужно перенести ключевые значения в другое место, где я создам новый ответ.