![](/img/trans.png)
[英]How to parse nested JSON using Jackson (whether recursively or iteratively)?
[英]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.