json 数组移位后保持结构

ve7v8dk2  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(108)

我试图构造一个JOLT转换,这样如果参数名在给定数组中匹配,它将更改参数值。
输入示例:

{
  "component": {
    "parameters": [
      {
        "parameter": {
          "name": "var_name",
          "value": "val"
        }
      },
      {
        "parameter": {
          "name": "1",
          "value": "2"
        }
      }
    ]
  },
  "additional": "onemore"
}

预期输出:

{
  "component": {
    "parameters": [
      {
        "parameter": {
          "name": "var_name",
          "value": "new_val"
        }
      },
      {
        "parameter": {
          "name": "1",
          "value": "2"
        }
      }
    ]
  },
  "additional": "onemore"
}

我当前的JOLT转换:

[
  {
    "operation": "shift",
    "spec": {
      "component": {
        "parameters": {
          "*": {
            "parameter": {
              "name": {
                "var_name": {
                  "#new_val": "&6.&5[&4].&3.value"
                }
              }
            }
          }
        }
      }
    }
  }
]

我的JOLT转换的问题是,它删除了Json的其余部分,而我希望在没有匹配的情况下保持不变
我试着寻找一个解决方案,但最接近的是this one,它允许我进行电流转换,但我不知道如何正确地修复它。

    • 编辑:**

实际上,在编写示例时,我遗漏了部分输入,但多亏了@Barbaros Özhan的回答,我才得以完成转换。
对于未来的参考,如果其他人需要它,我原来的输入有附加字段,如:

{
  "component": {
    "parameters": [
      {
        "option": "true",
        "parameter": {
          "name": "var_name",
          "description": "desc",
          "value": "val"
        }
      },
      {
        "option": "false",
        "parameter": {
          "name": "1",
          "description": "desc",
          "value": "2"
        }
      }
    ],
    "other value": "baz"
  },
  "additional": "onemore"
}

我使用的最后一个变换稍微做了一些调整,以考虑如下情况:

[
  {
    "operation": "shift",
    "spec": {
      "component": {
        "parameters": {
          "*": {
            "parameter": {
              "name": {
                "@": "&5.&4[&3].&2.&1",
                "var_name": {
                  "#new_val": "&6.&5[&4].&3.value"
                },
                "*": {
                  "@(2,value)": "&6.&5[&4].&3.value"
                }
              },
              "value": "&6.&5[&4].&3.value",
              "*": "&4.&3[&2].&1.&"
            },
            "*": "&3.&2[&1].&"
          }
        },
        "*": "&1.&"
      },
      "*": "&"
    }
  }
]
pod7payv

pod7payv1#

您可以使用此shift转换规范

[
  {
    "operation": "shift",
    "spec": {
      "component": {
        "parameters": {
          "*": {
            "parameter": {
              "name": {
                "@": "&5.&4[&3].&2.&1", // @ matches the value taken from one level up, eg. replicating "name"
                "var_name": {
                  "#new_val": "&6.&5[&4].&3.value"
                },
                "*": {
                  "@(2,value)": "&6.&5[&4].&3.value"
                }
              }
            }
          }
        }
      },
      "*": "&" // the "else" case(the attributes other than "component")
    }
  }
]

相关问题