【问题标题】:json parsing using jackson使用杰克逊解析json
【发布时间】:2016-07-26 10:51:32
【问题描述】:

我是 java 和 json 的新手,因此寻求您的帮助。 -我想创建一个新的 json 文件,只要从模板(json)中获取一些值。假设我有 json 模板,如下所述。 我想提取步骤数组中的任何内容。即步骤 1 和步骤 2。 并且这个值应该放在新的json中。

我面临的问题 1)如何使用jackson创建嵌套的json。我正在使用

 JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(new File("data/output.json"), JsonEncoding.UTF8);

generator.writeStartObject();
generator.writeObjectField("ABC","abc");
generator.writeEndObject();
generator.close();

但这将创建一个简单的 json,而不是嵌套的 json。我想要嵌套的 json。

2)我想提取步骤数组并将其传递给新创建的 json

我在 stackoverflow 中检查了这个,找到了很多答案,但这些对我没有帮助。 希望有人能帮助我。

json:

{
  "abc": "ryhey0",
  "shgsh": "jsdj",
  "fgjf": [
    {
      "type": "int",
      "steps": [
        {
          "type": "step1",
          "outputTypes": "int"
        },
        {
          "type": "step2",
          "outputTypes": "bool"
        }
      ]
    }
  ]
}

【问题讨论】:

  • 请澄清创建嵌套json
  • 创建嵌套 json 的意思是,我想使用 json 生成一个新的 json(它像上面的 json 模板一样嵌套)
  • 您的意思是“嵌套 json”= 嵌套 json objects?类似于fgjfsteps 中的对象数组?
  • 目前还不清楚。
  • 您是否尝试为模板和要创建的对象创建 pojo?有了这些你可以做模板json - >模板pojo,采取步骤并将它们放入你的结果pojo,然后使用jackson做结果pojo - > json。

标签: java json jackson


【解决方案1】:

注意:您的问题不是很清楚,很难为您提供明确的答案,除非您提供有关您想要实现的目标的一些说明。不过,这里有一些您可能会觉得有用的代码:

向 JSON 添加新属性:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(new File("/path/to/your/json/file"));

((ObjectNode) root).put("new-property", "some-value");
System.out.println(root);

获取steps 节点:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(new File("/path/to/your/json/file"));

JsonNode steps = root.get("fgjf").get(0).get("steps");
System.out.println(steps);

获取steps 节点并将其添加到新的 JSON:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(new File("/path/to/your/json/file"));

JsonNode steps = root.get("fgjf").get(0).get("steps");

ObjectNode newRoot = mapper.createObjectNode();
newRoot.set("steps", steps);
System.out.println(newRoot);

【讨论】:

  • 这里我们将“json string”传递给 readTree.instead 你能告诉我它将从文件中选择并传递给 readTree 的方式
  • @user6639252 mapper.readTree(new File("/path/to/your/json/file"))
  • 感谢您的帮助
  • 我还有 1 个问题:
  • 我还有 1 个问题:我有一个文件夹,其中有“n”个“Json”文件。我想获取这些“json”文件的名称并遍历这些文件。
【解决方案2】:

注意:这些未经测试。我刚刚在这里演示了这些方法

方法一(将对象序列化为 JSON):

ObjectMapper mapper = new ObjectMapper();
ClassWithCollectionFieldsToRepresentHierarchy obj = new ClassWithCollectionFieldsToRepresentHierarchy();

//Serialize object to json into file
mapper.writeValue(new File("c:\\obj.json"), obj);

//Serialize object to json into string
String jsonInString = mapper.writeValueAsString(obj);

方法 2(使用 Jackson API 构建 JSON):

ObjectMapper mapper = new ObjectMapper();
ObjectNode objectNode1 = mapper.createObjectNode();
objectNode1.put("abc", "ryhey0");
objectNode1.put("shgsh", "jsdj");
ArrayNode arrayNode2 = mapper.createArrayNode();
ObjectNode objectNode2 = mapper.createObjectNode();
objectNode2.put("type", "int");
ArrayNode arrayNode1 = mapper.createArrayNode();
ObjectNode objectNode3 = mapper.createObjectNode();
objectNode2.put("type", "step1");
objectNode2.put("outputTypes", "int");
ObjectNode objectNode4 = mapper.createObjectNode();
objectNode2.put("type", "step2");
objectNode2.put("outputTypes", "bool");
arrayNode1.add(objectNode3);
arrayNode1.add(objectNode4);
objectNode2.put("steps", arrayNode1);
arrayNode2.add(objectNode2);
objectNode1.put("fgjf", arrayNode2);
//Serialize object to json into file
mapper.writeValue(new File("c:\\obj.json"), objectNode1);

//Serialize object to json into string
String jsonInString = mapper.writeValueAsString(objectNode1);

【讨论】:

  • 我还有 1 个问题:
  • 我有一个包含“n”个“Json”文件的文件夹。我想获取这些“json”文件的名称并遍历这些文件。
  • @user6639252 停止在 cmets 中提出新问题。如果您有新问题,ask a new question in the right place 我们会为您提供帮助。
  • 查看此链接,只需将扩展名替换为 json - stackoverflow.com/questions/1384947/…
猜你喜欢
  • 1970-01-01
  • 2019-11-25
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 2022-07-21
  • 2021-11-01
  • 2013-12-29
相关资源
最近更新 更多