Разбор JSON в Java и манипулирование данными - PullRequest
0 голосов
/ 01 марта 2020

Я супер новичок в Java и пытаюсь проанализировать JSON и манипулировать данными в окончательную структуру данных, как показано ниже.

У меня есть эта модель:

public class StoreInfo {
    private String storeName;
    private String storeCode;
    private List<StoreLocations> locations = new ArrayList<>();
}

Вот ответ JSON, который я получаю от вызова Redis:

redisResult = "[{
   storeName: 'Walmart',
   storeCode: '0001',
   locations: [ [Object] ]
 },
 {
   displayName: 'Wegmans',
   storeCode: '0002',
   locations: [ [Object] ]
 }]"

Когда я вызываю Redis, я использую keyName groceryStores и fieldName 1.

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

groceryStores: { 1 : [
  {
    storeName: 'Walmart',
    storeCode: '0001',
    locations: [ [Object] ]
  },
  {
    displayName: 'Wegmans',
    storeCode: '0002',
    locations: [ [Object] ]
  }]

У меня много проблем с использованием Джексона для анализа исходной строки JSON в тип StoreInfo. Когда я пытаюсь сделать следующее, я получаю исключение от Джексона:

StoreInfo[] storeInfoArray = objectMapper.readValue(redisResult, StoreInfo[].class);
  1. Я не понимаю, как создать массив из StoreInfo объектов.

  2. Затем, чтобы использовать ключ и поле для создания моей окончательной структуры данных.

Я супер новичок в Java, и я понял как сделать последнюю часть в Javascript, но как это сделать в Java?

// Assuming the JSON response has been parsed

function addResponse (response, key, field, data) {
    response[key] = {}
    response[key][field] = data
  return response
}

1 Ответ

1 голос
/ 02 марта 2020

Самый простой вариант - создать класс-оболочку для StoreInfo, т. Е.

class StoreInfoDTO {
   List<StoreInfo> storeInfoList;
   //getter and setters 

}

Теперь используйте ObjectMapper как:

StoreInfo[] storeInfoArray = objectMapper.readValue(redisResult, 
StoreInfoDTO.class).getStoreInfoList();

Part2, задав значение в ответе:

class ResponseDTO {
       @JsonProperty("groceryStores")
       Map<Integer, List<StoreInfo>> props;
      //getter and setters 
 }

Теперь, чтобы использовать его:

    ResponseDTO responseDTO = new ResponseDTO();
    GrosseryStores grosseryStores = new GrosseryStores();
    ArrayList<StoreInfo> storeInfos = new ArrayList<StoreInfo>();
    storeInfos.add(new StoreInfo("SN1","1234"));
    ArrayList<StoreInfo> storeInfos1 = new ArrayList<StoreInfo>();
    storeInfos1.add(new StoreInfo("SN2","1236"));
    Map<Integer, List<StoreInfo>> map = new HashMap<>();
    map.put(1,storeInfos);
    map.put(2,storeInfos1);
    responseDTO.setProps(map);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...