如何在NiFi中使用JoltTransformationJson根据文件中另一个键的值向Json数组添加对象

gmol1639  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(99)

这是我第一次使用JoltTransformationJson,所以我的知识和经验有限。请帮助我完成这个复杂的项目。
要求:当***支付。代码〈〉"支付"*时,我必须为文件做以下两件事。
1.更改*付款。代码="拒绝"和***付款。文本="拒绝"
1.将 * JSON * 对象添加到
item. ADJ

***付款时. code =="已支付"***,不需要更改任何内容。

    • 输入**:
{
  "resourceType": "E",
  "id": "11",
  "identifier": [
    {
      "type": {
        "coding": [
          {
            "system": "sys1",
            "code": "aaa"
          }
        ]
      },
      "value": "212"
    },
    {
      "type": {
        "coding": [
          {
            "system": "sys2",
            "code": "RRR"
          }
        ]
      },
      "value": "367"
    }
  ],
  "status": "active",
  "created": "2021-08-05T02:43:48+00:00",
  "outcome": "complete",
  "item": [
    {
      "sequence": 1,
      "product": {
        "coding": [
          {
            "system": "example",
            "code": "abc",
            "display": "ABC"
          }
        ],
        "text": "ABC"
      },
      "servicedDate": "2021-08-04",
      "quantity": {
        "value": 60
      },
      "ADJ": [
        {
          "category": {
            "coding": [
              {
                "system": "code1",
                "code": "code1",
                "display": "CODE1"
              }
            ],
            "text": "CODE1"
          },
          "amount": {
            "value": 46.45,
            "currency": "USD"
          }
        },
        {
          "category": {
            "coding": [
              {
                "system": "code2",
                "code": "code2",
                "display": "CODE2"
              }
            ],
            "text": "CODE2"
          },
          "amount": {
            "value": 12.04,
            "currency": "USD"
          }
        }
      ]
    }
  ],
  "payment": {
    "type": {
      "coding": [
        {
          "system": "http://payment.com",
          "code": "reversed/cancelled"
        }
      ],
      "text": "cancelled"
    }
  }
}
    • 我的预期输出**:
{
  "resourceType": "E",
  "id": "11",
  "identifier": [
    {
      "type": {
        "coding": [
          {
            "system": "sys1",
            "code": "aaa"
          }
        ]
      },
      "value": "212"
    },
    {
      "type": {
        "coding": [
          {
            "system": "sys2",
            "code": "RRR"
          }
        ]
      },
      "value": "367"
    }
  ],
  "status": "active",
  "created": "2021-08-05T02:43:48+00:00",
  "outcome": "complete",
  "item": [
    {
      "sequence": 1,
      "product": {
        "coding": [
          {
            "system": "example",
            "code": "abc",
            "display": "ABC"
          }
        ],
        "text": "ABC"
      },
      "servicedDate": "2021-08-04",
      "quantity": {
        "value": 60
      },
      "ADJ": [
        {
          "category": {
            "coding": [
              {
                "system": "code1",
                "code": "code1",
                "display": "CODE1"
              }
            ],
            "text": "CODE1"
          },
          "amount": {
            "value": 46.45,
            "currency": "USD"
          }
        },
        {
          "category": {
            "coding": [
              {
                "system": "code2",
                "code": "code2",
                "display": "CODE2"
              }
            ],
            "text": "CODE2"
          },
          "amount": {
            "value": 12.04,
            "currency": "USD"
          }
        },
        {// new object I want to insert into
          "category": {
            "coding": [
              {
                "system": "sys_denail",
                "code": "denialreason"
              }
            ],
          "reason": {
            "coding": [
              {
                "system": "https://example.com",
                "code": "A1"
              }
            ],
            "text": "unknown"
          }}
        }
      ]
    }
  ],
  "payment": {
    "type": {
      "coding": [
        {
          "system": "http://payment.com",
          "code": "denied" //change the value to denied
        }
      ],
      "text": "denied" //change the value to denied
    }
  }
}
    • 编辑:***我曾尝试自己回答第二个案例,待第一个案例回答后再进行评估 *
4nkexdtk

4nkexdtk1#

欢迎来到SO,请ask minimal and reproducible questions,并展示您为未来所做的努力。
您需要的是根据树中每个键名的级别使用条件逻辑沿着带有“与”符号的占位符值。
我已经回答了一部分,这将处理你的问题的底部。实际上,其余部分的逻辑(* 插入一个对象到数组将是类似的 *)
因此,考虑一下以下解决方案

[
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "payment": {
        "type": {
          "coding": {
            "*": {
              "*": "&4.&3.&2[&1].&",
              "code": {
                "paid": {
                  "@1": "&6.&5.&4[&3].&2",
                  "@(4,text)": "&6.text"
                },
                "*": {
                  "#denied": "&6.&5.&4[&3].code",
                  "@(4,text)": {
                    "#denied": "&6.text"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

编辑(* 有关添加对象的答案 *)

你目前的想法是在default转换规范之后使用shift,这是非常好的,你可以这样改写

[
  {
    "operation": "default",
    "spec": {
      "temp_deny": {
        "denialreason": {
          "category": {
            "coding": [
              {
                "system": "sys_denail",
                "code": "denialreason"
              }
            ],
            "reason": {
              "coding": [
                {
                  "system": "https://example.com",
                  "code": "A1"
              }
            ],
              "text": "unknown"
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "item": {
        "*": {
          "*": "&2[&1].&",
          "ADJ": {
            "@": "&3[&2].&",
            "@(4,temp_deny)": "&3[&2].&"
          }
        }
      }
    }
  }
]

相关问题