簡體   English   中英

如何解析嵌套的 json object 使用 Jackson

[英]How to parse nested json object as it is using Jackson

我有以下 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" }
         }
      }
   ]
}

我有一個 object 代表這個 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 object?

我相信你明白你想要的是數組帽子的一部分,為什么我必須使用 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();
}

任何 Jason object 都可以映射到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)

Note that your JSON is a JSON object and not JSON list, so this example parses it to 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;
}

但是,在您的 class 中,“翻譯”是一個字符串,但在 JSON 結構中,它指向 object。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM