How to parse JSON file with the object, which contains dynamic fields. As an example here: Here is “items”, which has objects with name(“1c68b853-2a07-4409-ad61-8650212f3260”) and body. And it’s more then 2 items.
JavaScript
x
{
"id": "3c49a7aa-77e0-43cf-956c-a1ff970d7db2",
"code": "citizenship_country",
"name": "Гражданство",
"items": {
"1c68b853-2a07-4409-ad61-8650212f3260": {
"name": {
"id": "1c68b853-2a07-4409-ad61-8650212f3260",
"value": "ДЖЕРСИ",
"translation": "ДЖЕРСИ"
},
"modifiedDate": {
"id": "1c68b853-2a07-4409-ad61-8650212f3260",
"value": "мая 28, 2015",
"translation": null
},
"id": {
"id": "1c68b853-2a07-4409-ad61-8650212f3260",
"value": "237",
"translation": null
}
},
"dfd37aec-4ae7-4d8b-8e92-3a25fab57dd7": {
"name": {
"id": "dfd37aec-4ae7-4d8b-8e92-3a25fab57dd7",
"value": "РОССИЯ",
"translation": "РОССИЯ"
},
"modifiedDate": {
"id": "dfd37aec-4ae7-4d8b-8e92-3a25fab57dd7",
"value": "мая 28, 2015",
"translation": null
},
"id": {
"id": "dfd37aec-4ae7-4d8b-8e92-3a25fab57dd7",
"value": "185",
"translation": null
}
}
}
}
Advertisement
Answer
You can easily use the Map
interface, to store the dynamic parts:
Root.java:
JavaScript
package com.example.trial.dto;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class Root {
public String id;
public String code;
public String name;
public Map<UUID, Map<String, Item>> items = new HashMap<>();
}
Item.java:
JavaScript
package com.example.trial.dto;
import java.util.UUID;
public class Item {
public UUID id;
public String value;
public String translation;
}
MappingTest.java:
JavaScript
package com.example.trial.services;
import com.example.trial.dto.Root;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import java.io.IOException;
public class MappingTest {
ObjectMapper objectMapper = new ObjectMapper();
@Test
public void convert() throws IOException {
Root root = objectMapper.readValue("{n" +
" "id": "3c49a7aa-77e0-43cf-956c-a1ff970d7db2",n" +
" "code": "citizenship_country",n" +
" "name": "Гражданство",n" +
" "items": {n" +
" "1c68b853-2a07-4409-ad61-8650212f3260": {n" +
" "name": {n" +
" "id": "1c68b853-2a07-4409-ad61-8650212f3260",n" +
" "value": "ДЖЕРСИ",n" +
" "translation": "ДЖЕРСИ"n" +
" },n" +
" "modifiedDate": {n" +
" "id": "1c68b853-2a07-4409-ad61-8650212f3260",n" +
" "value": "мая 28, 2015",n" +
" "translation": nulln" +
" },n" +
" "id": {n" +
" "id": "1c68b853-2a07-4409-ad61-8650212f3260",n" +
" "value": "237",n" +
" "translation": nulln" +
" }n" +
" },n" +
" "dfd37aec-4ae7-4d8b-8e92-3a25fab57dd7": {n" +
" "name": {n" +
" "id": "dfd37aec-4ae7-4d8b-8e92-3a25fab57dd7",n" +
" "value": "РОССИЯ",n" +
" "translation": "РОССИЯ"n" +
" },n" +
" "modifiedDate": {n" +
" "id": "dfd37aec-4ae7-4d8b-8e92-3a25fab57dd7",n" +
" "value": "мая 28, 2015",n" +
" "translation": nulln" +
" },n" +
" "id": {n" +
" "id": "dfd37aec-4ae7-4d8b-8e92-3a25fab57dd7",n" +
" "value": "185",n" +
" "translation": nulln" +
" }n" +
" }n" +
" }n" +
"}", Root.class);
objectMapper.writeValue(System.out, root);
}
}
You can also, as well, create three different classes for name
, modifiedDate
, id
, but this is enough to show the main idea of the answer.