Массив Json для перечисления в список на java через Джексона

#java #arrays #json #parsing #jackson

Вопрос:

 public class Operation {
    private int id;
    private String operator;
    private int room;
    private long operationDateMillis;
    private String accessory;
    private List<String> statuses; 
    
    //setters getters
}
 

У меня есть этот класс, и мне нужно сохранить из JSON массив Operation в другом классе.

 public class OperationRoom {
    public static List<Operation> operations;
}
 

Вот мой файл JSON:

 {
  "operations": [
    {
      "id": 1,
      "operator": "william",
      "room": 1,
      "operationDate": "1620042283092",
      "accessory": "Security",
      "statuses": [
        "turned on",
        "temp 10",
        "fan off"
      ]
    },
    {
      "id": 2,
      "operator": "wilo",
      "room": 5,
      "operationDate": "1620042483092",
      "accessory": "Security",
      "statuses": [
        "turned off",
        "temp 15",
        "fan on"
      ]
    }
  ]
}
 

Я уже разработал класс синтаксического анализа JSON и мне удается получать узлы массива из файла JSON.

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

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

Ответ №1:

Вы можете использовать Jackson ObjectMapper для сопоставления JSON с вашим классом. Пример:

 import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        OperationRoom operationRoom = objectMapper.readValue(getJson(), OperationRoom.class);
        System.out.println(operationRoom);
    }

    static String getJson() {
        return """
                    {
                      "operations": [
                        {
                          "id": 1,
                          "operator": "william",
                          "room": 1,
                          "operationDate": "1620042283092",
                          "accessory": "Security",
                          "statuses": [
                            "turned on",
                            "temp 10",
                            "fan off"
                          ]
                        },
                        {
                          "id": 2,
                          "operator": "wilo",
                          "room": 5,
                          "operationDate": "1620042483092",
                          "accessory": "Security",
                          "statuses": [
                            "turned off",
                            "temp 15",
                            "fan on"
                          ]
                        }
                      ]
                    }
            """;
    }
}
 

PS: «»» -> Текстовый блок-это функция Java-13.

В ObjectMapper может быть много конфигураций сериализации и десериализации.