Как разделить JSON объект на куски? - PullRequest
2 голосов
/ 29 апреля 2020

Я использую Джексона, и у меня следующая структура JSON.

{
  "person": {
    "person1": {"name": "daniel", "age": "17"},
    "person2": {"name": "lucy", "age": "19"}
  }
}

И я хочу получить следующий результат или разделить их.
Json1:

{
  "person1": {"name": "daniel", "age": "17"},
}

Json2

{
  "person2": {"name": "lucy", "age": "19"}
}

Как это сделать?

Ответы [ 3 ]

1 голос
/ 29 апреля 2020

Как вы пытаетесь с jackson ... вот пример с JsonNode ..

public static void main(String[] args) throws Exception {
        String json = "{\n" +
                "      \"person\":{\n" +
                "        \"person1\": {\"name\": \"daniel\", \"age\":\"17\"},\n" +
                "        \"person2\": {\"name\": \"lucy\", \"age\": \"19\"}\n" +
                "      }\n" +
                "    }";
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(json);
        JsonNode json1 = jsonNode.get("person").get("person1");
        JsonNode json2 = jsonNode.get("person").get("person2");
        System.out.println("Json 1: "+objectMapper.writeValueAsString(json1));
        System.out.println("Json 2: "+objectMapper.writeValueAsString(json2));
    }
1 голос
/ 29 апреля 2020

Вы можете прочитать всю полезную нагрузку JSON как JsonNode, перебрать все поля и создать новые JSON Object -ы. См. Пример ниже:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;

public class JsonNodeApp {

    public static void main(String[] args) throws IOException {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper mapper = new ObjectMapper();

        JsonNode person = mapper.readTree(jsonFile).get("person");
        person.fields().forEachRemaining(entry -> {
            JsonNode newNode = mapper.createObjectNode().set(entry.getKey(), entry.getValue());
            System.out.println(newNode);
        });
    }
}

Над отпечатками кода:

{"person1":{"name":"daniel","age":"17"}}
{"person2":{"name":"lucy","age":"19"}}
1 голос
/ 29 апреля 2020

Попробуйте это:

String jsonstring = "{\r\n" + 
            "      \"person\":{\r\n" + 
            "        \"person1\": {\"name\": \"daniel\", \"age\":\"17\"},\r\n" + 
            "        \"person2\": {\"name\": \"lucy\", \"age\": 19}\r\n" + 
            "      }\r\n" + 
            "    }";
    JSONParser parser = new JSONParser();
    Object obj = parser.parse(jsonstring);
    JSONObject jsonObject = (JSONObject) obj;
    JSONObject persons = (JSONObject) jsonObject.get("person");
    JSONObject person1= (JSONObject) persons.get("person1");
    System.out.println(person1);
    JSONObject person2= (JSONObject) persons.get("person2");
    System.out.println(person2);
...