我想知道是否有任何方法可以通过使用 JOLT 转换将 JSON 属性的值连接到现有属性名称来重命名该字段。
假设我们在这里输入:
{
"auth_id": "0000-0000-0000",
"read_time": "2022-01-10T00:00:00.0",
"src_name": "REQ-A001",
"reading_a": "150.18",
"reading_b": "12.10",
"reading_c": "3.00",
"note": 1
}
我期望的是在所有现有字段名称之前连接来自 auth_id
和 read_time
的字段值,并使用冒号 (:
) 作为分隔符结果将变成:
预期:
{
"0000-0000-0000:2022-01-10T00:00:00.0:auth_id": "0000-0000-0000-0000-0000",
"0000-0000-0000:2022-01-10T00:00:00.0:read_time": "2022-01-10T00:00:00.0",
"0000-0000-0000:2022-01-10T00:00:00.0:src_name": "REQ-A001",
"0000-0000-0000:2022-01-10T00:00:00.0:reading_a": "150.18",
"0000-0000-0000:2022-01-10T00:00:00.0:reading_b": "12.10",
"0000-0000-0000:2022-01-10T00:00:00.0:reading_c": "3.00",
"0000-0000-0000:2022-01-10T00:00:00.0:note": 1
}
到目前为止我已经提到过
- Khusan Sharipov's question用于连接字段值
- DSC's digest of JOLT documentation澄清运算符(operator)如何开展工作
并提出JOLT规范:
[
{
"operation": "modify-default-beta",
"spec": {
// concatenate field value auth_id and read_time, while using ":" as separator
"ukey": "=concat(@(1,auth_id),':',@(1,read_time))"
}
},
{
"operation": "shift",
"spec": {
"*": {
// concatenate field values before field name
"@": "@(2,ukey):&"
}
}
}
]
但是我得到了这个输出:
{
"0000-0000-0000:2022-01-10T00:00:00.0": {
":auth_id": "0000-0000-0000",
":read_time": "2022-01-10T00:00:00.0",
":src_name": "REQ-A001",
":reading_a": "150.18",
":reading_b": "12.10",
":reading_c": "3.00",
":note": 1
}
}
我希望在 Nifi 的 JoltTransformJSON 处理器中使用 JOLT 规范。
非常感谢任何帮助或指导!
最佳答案
您可以使用这个较短规范:
[
{
"operation": "shift",
"spec": {
"*": "@(1,auth_id).@(1,read_time).&"
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": {
"*": "&2:&1:&"
}
}
}
}
]
或者您可以使用另一种方式,如下所示:
[
{
"operation": "shift",
"spec": {
"*": {
"@(2,auth_id)": "keys[#2]",
"@(2,read_time)": "keys[#2]",
"$": "keys[#2]",
"@": "values"
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"keys": {
"*": "=join(':',@0)"
}
}
},
{
"operation": "shift",
"spec": {
"values": {
"*": "@(2,keys[#1])"
}
}
}
]
1、Shift操作分别创建键
和值
。
2、修改操作将所有key
与:
连接起来。
3、Shift操作创建我们想要的输出。
注意:请单独运行每个规范以更好地理解此代码。
关于json - Jolt 变换 - 如何用字段值重命名字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75672391/