繁体   English   中英

使用 JOLT 将复杂的 JSON 转换为 CSV 文件

[英]Convert Complex JSON To CSV file using JOLT

我是 JOLT 的新手,对此了解不多,我需要 JOLT 规范来将我的以下 JSON 文件转换为 CSV 文件:

{
  "bigRecords": [
    {
      "Records": {
        "Name": "R1",
        "Id": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
        "Type": "New",
        "Area": "Eng",
        "createdAt": "11-10-2022 06:10:00",
        "deletedDate": "11-10-2022 06:20:00",
        "deleted": true,
        "deletedBy": "userId",
        "createdBy": "userId"
      },
      "ancestors": [
        {
          "Name": "P1",
          "Type": "DELETE",
          "sta": "",
          "some": "",
          "Id": "1"
        }
      ]
    },
    {
      "Records": {
        "Name": "R2",
        "Id": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
        "Type": "DRAFT",
        "Area": "Eng",
        "createdAt": "11-10-2022 06:10:00",
        "deletedDate": "11-10-2022 06:20:00",
        "deleted": true,
        "deletedBy": "userId",
        "createdBy": "userId"
      },
      "dependentRecords": [
        {
          "Name": "P3",
          "Type": "DELETE",
          "sta": "1P0",
          "some": "1P02",
          "Id": "1P0"
        }
      ]
    }
  ]
}

请帮助我使用 JOlT 库将复杂的 json 转换为 CSV,或者我可以在 spring 启动时使用任何其他方式实现此目的?

您拥有易于使用的 JsonFlattener。 https://github.com/wnameless/json-flattener

Map<String, Object> flattenJson = JsonFlattener.flattenAsMap(json);

System.out.println(flattenJson);

// {ab=1, ac=null, ad[0]=false, ad[1]=true, e=f, g=2.3}

库乔森flatten() function。它还有function unflatten()来反转操作。

https://github.com/octomix/josson

反序列化

Josson josson = Josson.fromJsonString(
    "{" +
    "    \"bigRecords\": [" +
    "        {" +
    "        \"Records\": {" +
    "            \"Name\": \"R1\"," +
    "            \"Id\": \"1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01\"," +
    "            \"Type\": \"New\"," +
    "            \"Area\": \"Eng\"," +
    "            \"createdAt\": \"11-10-2022 06:10:00\"," +
    "            \"deletedDate\": \"11-10-2022 06:20:00\"," +
    "            \"deleted\": true," +
    "            \"deletedBy\": \"userId\"," +
    "            \"createdBy\": \"userId\"" +
    "            " +
    "        }," +
    "        \"ancestors\": [" +
    "            {" +
    "                \"Name\": \"P1\"," +
    "                \"Type\": \"DELETE\"," +
    "                \"sta\": \"\"," +
    "                \"some\": \"\"," +
    "                \"Id\": \"1\"" +
    "            }" +
    "        ]" +
    "    }, {" +
    "        \"Records\": {" +
    "            \"Name\": \"R2\"," +
    "            \"Id\": \"1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01\"," +
    "            \"Type\": \"DRAFT\"," +
    "            \"Area\": \"Eng\"," +
    "            \"createdAt\": \"11-10-2022 06:10:00\"," +
    "            \"deletedDate\": \"11-10-2022 06:20:00\"," +
    "            \"deleted\": true," +
    "            \"deletedBy\": \"userId\"," +
    "            \"createdBy\": \"userId\"" +
    "        }," +
    "        \"dependentRecords\": [" +
    "            {" +
    "                \"Name\": \"P3\"," +
    "                \"Type\": \"DELETE\"," +
    "                \"sta\": \"1P0\"," +
    "                \"some\": \"1P02\"," +
    "                \"Id\": \"1P0\"" +
    "            }" +
    "        ]" +
    "    }" +
    "    ]" +
    "}");

款式一

JsonNode node = josson.getNode("flatten('.','[%d]')");
System.out.println(node.toPrettyString());

Output

{
  "bigRecords[0].Records.Name" : "R1",
  "bigRecords[0].Records.Id" : "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
  "bigRecords[0].Records.Type" : "New",
  "bigRecords[0].Records.Area" : "Eng",
  "bigRecords[0].Records.createdAt" : "11-10-2022 06:10:00",
  "bigRecords[0].Records.deletedDate" : "11-10-2022 06:20:00",
  "bigRecords[0].Records.deleted" : true,
  "bigRecords[0].Records.deletedBy" : "userId",
  "bigRecords[0].Records.createdBy" : "userId",
  "bigRecords[0].ancestors[0].Name" : "P1",
  "bigRecords[0].ancestors[0].Type" : "DELETE",
  "bigRecords[0].ancestors[0].sta" : "",
  "bigRecords[0].ancestors[0].some" : "",
  "bigRecords[0].ancestors[0].Id" : "1",
  "bigRecords[1].Records.Name" : "R2",
  "bigRecords[1].Records.Id" : "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
  "bigRecords[1].Records.Type" : "DRAFT",
  "bigRecords[1].Records.Area" : "Eng",
  "bigRecords[1].Records.createdAt" : "11-10-2022 06:10:00",
  "bigRecords[1].Records.deletedDate" : "11-10-2022 06:20:00",
  "bigRecords[1].Records.deleted" : true,
  "bigRecords[1].Records.deletedBy" : "userId",
  "bigRecords[1].Records.createdBy" : "userId",
  "bigRecords[1].dependentRecords[0].Name" : "P3",
  "bigRecords[1].dependentRecords[0].Type" : "DELETE",
  "bigRecords[1].dependentRecords[0].sta" : "1P0",
  "bigRecords[1].dependentRecords[0].some" : "1P02",
  "bigRecords[1].dependentRecords[0].Id" : "1P0"
}

样式 2

JsonNode node = josson.getNode("flatten('_')");
System.out.println(node.toPrettyString());

Output

{
  "bigRecords_0_Records_Name" : "R1",
  "bigRecords_0_Records_Id" : "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
  "bigRecords_0_Records_Type" : "New",
  "bigRecords_0_Records_Area" : "Eng",
  "bigRecords_0_Records_createdAt" : "11-10-2022 06:10:00",
  "bigRecords_0_Records_deletedDate" : "11-10-2022 06:20:00",
  "bigRecords_0_Records_deleted" : true,
  "bigRecords_0_Records_deletedBy" : "userId",
  "bigRecords_0_Records_createdBy" : "userId",
  "bigRecords_0_ancestors_0_Name" : "P1",
  "bigRecords_0_ancestors_0_Type" : "DELETE",
  "bigRecords_0_ancestors_0_sta" : "",
  "bigRecords_0_ancestors_0_some" : "",
  "bigRecords_0_ancestors_0_Id" : "1",
  "bigRecords_1_Records_Name" : "R2",
  "bigRecords_1_Records_Id" : "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
  "bigRecords_1_Records_Type" : "DRAFT",
  "bigRecords_1_Records_Area" : "Eng",
  "bigRecords_1_Records_createdAt" : "11-10-2022 06:10:00",
  "bigRecords_1_Records_deletedDate" : "11-10-2022 06:20:00",
  "bigRecords_1_Records_deleted" : true,
  "bigRecords_1_Records_deletedBy" : "userId",
  "bigRecords_1_Records_createdBy" : "userId",
  "bigRecords_1_dependentRecords_0_Name" : "P3",
  "bigRecords_1_dependentRecords_0_Type" : "DELETE",
  "bigRecords_1_dependentRecords_0_sta" : "1P0",
  "bigRecords_1_dependentRecords_0_some" : "1P02",
  "bigRecords_1_dependentRecords_0_Id" : "1P0"
}

通过使用Jolt

您可以通过叶子的各自深度来分隔级别,并且平铺下划线分隔的符号是节点代表,以便使整个 JSON 变平,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {// the level of the indexes of the array
          "Reco*": {
            "*": {
              "@": "&4_&3_&2_&" // & : the replicator of the current level value, &2, &3, ... represents going respective 2, 3 levels up the tree 
            }
          },          
          "*": {// else case -> keys other than "Records"
            "*": {// the level of the indexes of the respective arrays
              "*": {
                "@": "&5_&4_&3_&2_&"
              }
            }
          }
        }
      }
    }
  }
]

哪个产量

{
  "bigRecords_0_Records_Name" : "R1",
  "bigRecords_0_Records_Id" : "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
  "bigRecords_0_Records_Type" : "New",
  "bigRecords_0_Records_Area" : "Eng",
  "bigRecords_0_Records_createdAt" : "11-10-2022 06:10:00",
  "bigRecords_0_Records_deletedDate" : "11-10-2022 06:20:00",
  "bigRecords_0_Records_deleted" : true,
  "bigRecords_0_Records_deletedBy" : "userId",
  "bigRecords_0_Records_createdBy" : "userId",
  "bigRecords_0_ancestors_0_Name" : "P1",
  "bigRecords_0_ancestors_0_Type" : "DELETE",
  "bigRecords_0_ancestors_0_sta" : "",
  "bigRecords_0_ancestors_0_some" : "",
  "bigRecords_0_ancestors_0_Id" : "1",
  "bigRecords_1_Records_Name" : "R2",
  "bigRecords_1_Records_Id" : "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
  "bigRecords_1_Records_Type" : "DRAFT",
  "bigRecords_1_Records_Area" : "Eng",
  "bigRecords_1_Records_createdAt" : "11-10-2022 06:10:00",
  "bigRecords_1_Records_deletedDate" : "11-10-2022 06:20:00",
  "bigRecords_1_Records_deleted" : true,
  "bigRecords_1_Records_deletedBy" : "userId",
  "bigRecords_1_Records_createdBy" : "userId",
  "bigRecords_1_dependentRecords_0_Name" : "P3",
  "bigRecords_1_dependentRecords_0_Type" : "DELETE",
  "bigRecords_1_dependentRecords_0_sta" : "1P0",
  "bigRecords_1_dependentRecords_0_some" : "1P02",
  "bigRecords_1_dependentRecords_0_Id" : "1P0"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM