Лучший способ сопоставить объекты с вложенными Json - PullRequest
2 голосов
/ 29 мая 2020

В настоящее время я пытаюсь написать сайт, который взаимодействует с API publi c, используя Feign и Spring. Мне трудно решить, как обрабатывать сопоставление объектов для глубоко вложенных JSON.

Пример:

[
  {
    "type": "console",
    "category": "Console",
    "result_count": 1,
    "shown_count": 1,
    "result": [
      {
        "name": "Nintendo Switch",
        "id": "nintendo-switch",
        "platform": {
          "name": "Nintendo",
          "category": "nintendo",
          "type": "platform"
        },
        "image": {
          "url": "https://encrypted-tbn1.gstatic.com/shopping?q=tbn:ANd9GcRqJYIheMDjTE9WAHjMSW4bjh7OplS7Bep9CdsBBLWMwGdXim7xOG4&usqp=CAc",
          "height": 409,
          "width": 631
        },
        "min_price": 205,
        "variations": [
          {
            "items": [
              {
                "hex_code": "#696969",
                "name": "Gray",
                "id": "space-gray",
                "type": "color"
              },
              {
                "hex_code": "#C0C0C0",
                "name": "Silver",
                "id": "silver",
                "type": "color"
              }
            ],
            "name": "Color",
            "type": "color"
          },
          {
            "items": [
              {
                "name": "Nintendo",
                "id": "nintendo",
                "type": "platform"
              }
            ],
            "name": "Platform",
            "type": "platform"
          }
        ]
      }
    ]
  }
]

На данный момент у меня есть единственный файл Java с для каждого объекта в JSON, и я подумал о том, чтобы средство отображения объектов просто помещало все в HashMap. Есть ли более элегантный способ сделать это?

public class SearchResults {
    private List<SearchResult> products;
    private int resultCount;
    private String type;

}

class SearchResult {
    private String name;
    private String slug;
    private Image image;

}

class Image {
    private String URL;
    private String height;
    private String width;

}

1 Ответ

2 голосов
/ 29 мая 2020

На основе файла json при условии, что я разработал классы, а также предоставил код для синтаксического анализа файла json на java

public class  Console{
     String type;
     String category;
     int result_count;
     int show_count;
     Result [] result;
}

public class Result{
    String name;
    String id;
    Platform platform;
    Image image;
    int mini_price;
    Variation [] variations;
}

public class Platform{
    String name;
    String category;
    String type;
}

public class Image{
    String url;
    int height;
    int width;
}

public class Variation{
    String name;
    String type;
    Item [] items;

}

public class Item{
    String hex_code;
    String name;
    String id;
    String type;
}

код для разбора:

ObjectMapper objectMapper = new ObjectMapper();
         objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
         Console[] consoles = objectMapper.readValue(ResourceUtils.getFile("path of json file"), Console[].class);
         logger.info("Continents -> {}",(Object)continents);
         for(Console console:consoles) {
            //read the data accordingly
                     }
...