【问题标题】:JOLT filter - remove fields from nested array based on conditionJOLT 过滤器 - 根据条件从嵌套数组中删除字段
【发布时间】:2023-01-20 21:35:19
【问题描述】:

大家好, 我必须制作一个 JOLT 过滤器以根据条件删除字段,而且该过滤器必须使用两种不同的 JSON 结构。

所以,情况是这样的。

我有这些 JSON:

JSON 1:

{
  "header": {
    "key": "value"
  },
  "payload": {
    "someArray": [
      {
        "key1": "val1"
      }
    ],
    "elements": [
      {
        "service": "serviceOne",
        "something": "somethingValue"
      },
      {
        "service": "THIS_SERVICE",
        "attributes": [
          {
            "something": "somethingValue",
            "attributes_here": {
              "key1": "val1",
              "key2": "val2",
              "key3": "val3",
              "key4": "val4",
              "key5": "val5",
              "key6": "val6"
            }
          }
        ]
      }
    ]
  },
  "data": {
    "key1": "val1"
  }
}

JSON 2:

{
  "responseMessage": {
    "header": {
      "key": "value"
    },
    "payload": {
      "someArray": [
        {
          "key1": "val1"
        }
      ],
      "elements": [
        {
          "service": "serviceOne",
          "something": "somethingValue"
        },
        {
          "service": "THIS_SERVICE",
          "attributes": [
            {
              "something": "somethingValue",
              "attributes_here": {
                "key1": "val1",
                "key2": "val2",
                "key3": "val3",
                "key4": "val4",
                "key5": "val5",
                "key6": "val6"
              }
            }
          ]
        }
      ]
    },
    "data": {
      "key1": "val1"
    },
    "state": {
      "state1": "state1"
    }
  },
  "status": [],
  "notes": []
}

仅当“服务”值为“THIS_SERVICE”时,我才需要过滤器从“attributes_here”中删除例如“key2”和“key5”,并为 JSON 保留相同的结构。

期望的输出:

JSON 1:

{
  "header": {
    "key": "value"
  },
  "payload": {
    "someArray": [
      {
        "key1": "val1"
      }
    ],
    "elements": [
      {
        "service": "serviceOne",
        "something": "somethingValue"
      },
      {
        "service": "THIS_SERVICE",
        "attributes": [
          {
            "something": "somethingValue",
            "attributes_here": {
              "key1": "val1",
              "key3": "val3",
              "key4": "val4",
              "key6": "val6"
            }
          }
        ]
      }
    ]
  },
  "data": {
    "key1": "val1"
  }
}

JSON 2:

{
  "responseMessage": {
    "header": {
      "key": "value"
    },
    "payload": {
      "someArray": [
        {
          "key1": "val1"
        }
      ],
      "elements": [
        {
          "service": "serviceOne",
          "something": "somethingValue"
        },
        {
          "service": "THIS_SERVICE",
          "attributes": [
            {
              "something": "somethingValue",
              "attributes_here": {
                "key1": "val1",
                "key3": "val3",
                "key4": "val4",
                "key6": "val6"
              }
            }
          ]
        }
      ]
    },
    "data": {
      "key1": "val1"
    },
    "state": {
      "state1": "state1"
    }
  },
  "status": [],
  "notes": []
}

任何帮助,将不胜感激。 谢谢你,祝你有美好的一天!

【问题讨论】:

    标签: json filter jolt


    【解决方案1】:

    请尝试以下震动规格:

    [
      {
        "operation": "shift",
        "spec": {
          "#false": "has_responseMessage",
          "header": "&",
          "payload": "&",
          "data": "&",
          "responseMessage": {
            "*": "&",
            "@(2,status)": "rest_&.status",
            "@(2,notes)": "rest_&.notes",
            "#true": "has_responseMessage"
          }
        }
      },
      {
        "operation": "shift",
        "spec": {
          "*": "&",
          "payload": {
            "*": "&1.&",
            "elements": {
              "*": { // 0, 1
                "*": "&3.&2[&1].&",
                "service": {
                  "@": "&4.&3[&2].&1",
                  "THIS_SERVICE": {
                    "@(2,attributes)": "&5.&4[&3].attributes_temp",
                    "#attributes_temp": "&5.&4[&3].attributes_key"
                  },
                  "#attributes": "&4.&3[&2].attributes_key"
                }
              }
            }
          }
        }
      },
      {
        "operation": "modify-overwrite-beta",
        "spec": {
          "has_responseMessage": "=lastElement",
          "payload": {
            "elements": {
              "*": {
                "attributes_key": "=lastElement"
              }
            }
          }
        }
      },
      {
        "operation": "remove",
        "spec": {
          "payload": {
            "elements": {
              "*": {
                "attributes_temp": {
                  "*": {
                    "attributes_here": {
                      "key2": "",
                      "key5": ""
                    }
                  }
                }
              }
            }
          }
        }
      },
      {
        "operation": "shift",
        "spec": {
          "*": "&",
          "payload": {
            "*": "&1.&",
            "elements": {
              "*": { // 0, 1
                "service": "&3.&2[&1].&",
                "something": "&3.&2[&1].&",
                "attributes_key": {
                  "attributes_temp": {
                    "@(2,attributes_temp)": "&5.&4[&3].attributes"
                  },
                  "attributes": {
                    "@(2,attributes)": "&5.&4[&3].attributes"
                  }
                }
              }
            }
          }
        }
      },
      {
        "operation": "shift",
        "spec": {
          "has_responseMessage": {
            "true": {
              "@(3,header)": "responseMessage.header",
              "@(3,payload)": "responseMessage.payload",
              "@(3,data)": "responseMessage.data",
              "@(3,state)": "responseMessage.state"
            },
            "false": {
              "@(3,header)": "header",
              "@(3,payload)": "payload",
              "@(3,data)": "data"
            }
          },
          "rest_responseMessage": {
            "*": "&"
          }
        }
      }
    ]
    

    您可以根据需要删除 remove 操作中的字段。

    【讨论】:

    • 嘿@MohammadReza 过滤器对于第一个 json 看起来不错,但对于第二个 json,有效负载、数据和状态(缺少)必须在“responseMessage”对象中。
    • @dimitar.bonchev 已修复。
    猜你喜欢
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2022-12-07
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多