java - 如何使用JAVA从动态创建的JSON中递归获取所有键值对

标签 java json

有什么方法可以将字段和值转换为 Java 代码吗? 例如,我有以下 JSON:

{
        "name":"Example",
        "description":"An example",
        "process_1": {
                "name":"My process-1",
                "image":"Docker Image",
                "command":["command", "file_name"],
                "arguments":["--arg"]
                },
        "process_2": {
                "name":"My process-2",
                "image":"Docker Image",
                "command":["command", "file_name"],
                "arguments":["--arg"]
                }
        .
        .

        .
        .
        "process_n": {
                "name":"My process-n",
                "image":"Docker Image",
                "command":["command", "file_name"],
                "arguments":["--arg"]
                }
}

现在我想获取所有的键作为变量及其在java中的相应值。 请注意,JSON 中的字段名称不是恒定的,即每次都会使用不同的字段名称动态创建 JSON 文件。名称和描述字段以及流程内的字段都是恒定的。但不是流程字段。

例如,在 Java 中,它应该如下所示:

String name = "Example"
String description = "An Example"
String process_1_name = "My process-1"
String process_2_command = ["command", "file_name"]

而且我不知道如何存储“process-1”中的级联字段。

最佳答案

您的 json 无效 - 删除 "arguments":["--arg"], 之后的 ','。

为了解析,您可以使用com.fasterxml.jackson.databind.ObjectMapper和Map:

public static void main(String[] args) throws IOException {
  String json =  "{\n" +
          "  \"name\":\"Example\",\n" +
          "  \"description\":\"An example\",\n" +
          "  \"process-1\": {\n" +
          "    \"name\":\"My process-1\",\n" +
          "    \"image\":\"Docker Image\",\n" +
          "    \"command\":[\"command\", \"file_name\"],\n" +
          "    \"arguments\":[\"--arg\"]\n" +
          "  },\n" +
          "  \"process-2\": {\n" +
          "    \"name\":\"My process-1\",\n" +
          "    \"image\":\"Docker Image\",\n" +
          "    \"command\":[\"command\", \"file_name\"],\n" +
          "    \"arguments\":[\"--arg\"]\n" +
          "  }\n" +
          "}\n";

    ObjectMapper mapper = new ObjectMapper();
    LinkedHashMap valueMap = mapper.readValue(json, LinkedHashMap.class);
    Object name = valueMap.get("name");
    Object description = valueMap.get("description");
    System.out.println("name: " + name);
    System.out.println("description: " + description);

    Map process1 = (Map) valueMap.get("process-1");
    Object process1Name = process1.get("name");
    Object process1Image = process1.get("image");
    System.out.println("process1Name: " + process1Name);
    System.out.println("process1Image: " + process1Image);

    mapper.writeValue(new File("./process-1.json"), process1);
    mapper.writeValue(new File("./process-2.json"), (Map) valueMap.get("process-2"));
}

输出:

name: Example
description: An example
process1Name: My process-1
process1Image: Docker Image

关于java - 如何使用JAVA从动态创建的JSON中递归获取所有键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57985570/

相关文章:

java - 使用 SharedPreferences 的许多用户登录

java - NoSuchMethodError org.apache.http.conn.scheme.Scheme

java - java中读取xml文件时出错

java - 如何在 Linux 中使用 C 或 Java 获取硬盘的序列号 id?

java - SimpleDateFormat 解析返回 null

java - 为什么我在两个相同的查询之间得到相同的结果?

java - spring mvc中ajax调用接收json数组出错

java - 使用 Retrofit 从最内部类获取数据。帮我显示A类和B类的数据

c++ - 使用 JsonCPP 上的文本索引循环遍历 JSON 的所有项目

javascript - 用js获取其他页面的数据?