【问题标题】:Recursively transform JSON using jolt使用 jolt 递归转换 JSON
【发布时间】:2023-01-23 15:48:30
【问题描述】:

我正在尝试使用 JOLT 将一个 JSON 转换为另一个 JSON。

我的源 JSON 具有以下格式(子模块的级别数未知):

{
    "modules": [
        {
            "id": "1",
            "modules": [
                {
                    "id": "1.1",
                    "modules": []
                },
                {
                    "id": "1.2",
                    "modules": [
                        {
                            "id": "1.2.1",
                            "modules": []
                        }
                    ]
                }
            ]
        },
        {
            "id": "2",
            "modules": [
                {
                    "id": "2.1",
                    "modules": []
                }
            ]
        }
    ]
}

我的 JOLT 转换规范如下所示:

[
    {
        "operation": "shift",
        "spec": {
            "modules": {
                "*": {
                    "id": "new_modules[&1].id"
                }
            }
        }
    }
]

我得到的输出是:

{
    "new_modules": [
      {
        "id": "1"
      },
      {
        "id": "2"
      }
    ]
}

我应该怎么做才能获取目标 JSON 中的所有模块:

{
    "new_modules": [
      {
        "id": "1"
      },
      {
        "id": "1.1"
      },
      {
        "id": "1.2"
      },
      {
        "id": "1.2.1"
      },
      {
        "id": "2"
      },
      {
        "id": "2.1"
      }
    ]
}

我在下面添加了一些不相关的文本,因为 stackoverflow 抱怨我的问题主要是代码,我必须添加更多详细信息。如果我遗漏了详细信息,请告诉我。

【问题讨论】:

    标签: json jolt


    【解决方案1】:

    你可以使用这个规范:

    [
      {
        "operation": "shift",
        "spec": {
          "modules": {
            "*": {
              "id": "new_modules[].&",
              "modules": {
                "id": "new_modules[].&",
                "*": {
                  "id": "new_modules[].&",
                  "modules": {
                    "*": {
                      "id": "new_modules[].&",
                      "modules": {
                        "id": "new_modules[].&"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    ]
    

    【讨论】:

      【解决方案2】:

      你可以使用这样的转移转换规范

      [
        {
          "operation": "shift",
          "spec": {
            "modules": {
              "*": {
                "id": "[&1].x&1.&",
                "modules": {
                  "*": {
                    "id": "[&3].y&1.&",
                    "modules": {
                      "*": {
                        "id": "[&5].z&1.&"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        {
          "operation": "shift",
          "spec": {
            "*": {
              "*": "new_modules[]"
            }
          }
        }
      ]
      

      【讨论】:

        猜你喜欢
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多