如何在 Jolt 变换规范中将对象添加到 Json

How to add a object to a Json in a Jolt Transform spec

在 nifi 中,我试图用可变数量的键转换 JSON,但总是有一个“日期”键。我想转换 Json 并将日期的字符串值更改为 json 对象。但是我没有得到我需要的东西。我可以使用哪个 operation/spec 来完成预期的输出。 输入:

{
  "name": "val1",
  "date": "2021-05-19T00:53:20+00:00"
}

规格:

[
  {
    "operation": "shift",
    "spec": {
      "@0": "wrapper"
    }
  }, {
    "operation": "default",
    "spec": {
      "wrapper": {
        "date": { "$date": "${date_attr}" }
      }
    }
  }
]

预期输出

{
  "wrapper": {
    "name": "val1",
    "date": {"$date": "2021-05-19T00:53:20+00:00"}
  }
}

我得到了什么

{
  "wrapper": {
    "name": "val1",
    "date": "2021-05-19T00:53:20+00:00"
  }
}

default 的情况下,如果规范中提到的键在输入 json 中丢失,则添加它,否则可能不会发生任何更改。 这里你试图将一个节点推到更高的层次,这可以通过创建和分配一个临时节点来实现。

\是一个转义字符。

[
  {
    "operation": "shift",
    "spec": {
      "date": "date1",
      "@0": "."
    }
  },
  {
    "operation": "remove",
    "spec": {
      "date": ""
    }
  }, {
    "operation": "shift",
    "spec": {
      "date1": "wrapper.date.\$date",
      "@0": "wrapper"
    }
  }, {
    "operation": "remove",
    "spec": {
      "wrapper": {
        "date1": ""
      }
    }
  }
]

只有一步 shift 转换以及 $ 运算符的转义字符 (\) 就足以使用,例如

[
  {
    "operation": "shift",
    "spec": {
      "name": "wrapper.name",
      "date": { "@(1,date)": "wrapper.&.\$date" }
    }
  }
]

我们要去哪里 一个 通过使用第一个参数 1@(1,date ) 一直停留在嵌套对象中

Edit : 考虑到你只需要覆盖 date 属性,其他的不用单独添加,使用以下再次只有一步 shift transformation

[
  {
    "operation": "shift",
    "spec": {
      "*": "wrapper.&",
      "date": { "@(1,date)": "wrapper.&.\$date" }
    }
  }
]