Как разобрать вложенный объект json, используя Джексона

У меня есть следующая структура JSON:

{
   "sets": [
      {...},
      {
         "id": "id",
         "html": "<html></html>",
         "javascript": "{onError: function (event) {}}",
         "css": ".someclass {}",
         "translations": {
            "en": { "LABEL_1": "Some label text", "HEADER_1": "Some header text" },
            "fr": { "LABEL_1": "Some label text", "HEADER_1": "Some header text" }
         }
      }
   ]
}

У меня есть объект, который представляет этот JSON для целей десериализации

@Data //Lombok
@NoArgsConstructor //Lombok
public class Set {
   @JsonProperty("screenSetID")
    private String screenSetID;
    @JsonProperty("html")
    private String html;
    @JsonProperty("css")
    private String css;
    @JsonProperty("javascript")
    private String javascript;
    @JsonProperty("translations")
    private String translations;
}

У меня есть следующий фрагмент кода для десериализации JSON

private List<Set> parseSetsData(String json) {
   ObjectMapper mapper = new ObjectMapper();
   
   try {
     return mapper.readValue(json, TypeReference<List<Set>(){});
   } catch (IOException e) {
     throw new RuntimeException(e);
   }
}

Как я могу анализировать объект перевода JSON как есть?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
4 430
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я уверен, вы понимаете, что то, что вы хотите, является частью шляп массива, поэтому мне пришлось использовать цикл for:

ObjectMapper mapper = new ObjectMapper();
JsonNode treeNode = mapper.readTree(json);
treeNode=treeNode.findValue("sets");
for (Iterator<JsonNode> it = treeNode.elements(); it.hasNext(); ) {
   JsonNode node = it.next();
   String theValueYouWant=node.findValue("translations").textValue();
}
Ответ принят как подходящий

Любой объект Джейсона можно сопоставить с Map<String, Object>, а любой список Json можно сопоставить с List<Object>. Таким образом, вы можете проанализировать свой JSON следующим образом:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModules(new JavaTimeModule());
objectReader = objectMapper.reader();
Map<String, Object> parsedJson = (Map<String, Object>)objectReader.forType(Map.class).readValue(jsonString)

Обратите внимание, что ваш JSON является объектом JSON, а не списком JSON, поэтому в этом примере он анализируется в Map

Json я обнаружил, что когда вы десериализуете свой элемент, он должен выглядеть следующим образом:

public class En
{
    @JsonProperty("LABEL_1")
    public String lABEL_1;
    @JsonProperty("HEADER_1")
    public String hEADER_1;
}

public class Fr
{
    @JsonProperty("LABEL_1")
    public String lABEL_1;
    @JsonProperty("HEADER_1")
    public String hEADER_1;
}

public class Translations
{
    public En en;
    public Fr fr;
}

public class Set
{
    public String id;
    public String html;
    public String javascript;
    public String css;
    public Translations translations;
}

Однако в вашем классе «переводы» — это строка, а в структуре JSON она указывает на объект.

Другие вопросы по теме