【问题标题】:How to separate JSON object on pieces?如何在碎片上分离 JSON 对象?
【发布时间】:2020-08-12 23:11:03
【问题描述】:

我正在使用 Jackson,我有以下 JSON 结构。

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

我想得到以下结果或将它们分开。
json1:

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

Json2

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

怎么做?

【问题讨论】:

  • 你为什么不用json-simple
  • 我只使用jackson,因为这是我第一次进入这个分支
  • 好的,我推荐你使用 json-simple 并且有大量的教程,甚至我可以帮助你

标签: java json jackson unwrap jsonnode


【解决方案1】:

您可以将整个JSON 有效负载读取为JsonNode,并遍历所有字段并创建新的JSON Object-s。见下例:

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"}}

【讨论】:

    【解决方案2】:

    试试这个:

    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);
    

    【讨论】:

      【解决方案3】:

      当您尝试使用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));
          }
      

      【讨论】:

        猜你喜欢
        • 2016-12-23
        • 1970-01-01
        • 2012-04-03
        • 2010-10-15
        • 2018-09-27
        • 1970-01-01
        • 2018-02-12
        • 2015-01-17
        • 2011-12-22
        相关资源
        最近更新 更多