#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, но потому, что мне нужно перенести ключевые значения в другое место, где я создам новый ответ.