У меня есть следующая структура 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 как есть?
Я уверен, вы понимаете, что то, что вы хотите, является частью шляп массива, поэтому мне пришлось использовать цикл 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 она указывает на объект.