我想知道是否有任何方法可以通过使用Jolt转换将JSON属性值连接到现有属性名来重命名该字段.

假设我们这里有input个:

{
  "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_idread_time的字段值,并使用冒号(:)作为分隔符,结果将变为:

Expected:

{
  "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
}

到目前为止,我已经提到

打出JOLT spec分:

[
  {
    "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
  }
}

我希望在NifiJoltTransformJSON处理器中使用Jolt规范.

任何帮助或指导都是非常感谢的!

推荐答案

您可以使用此shorter规格:

[
  {
    "operation": "shift",
    "spec": {
      "*": "@(1,auth_id).@(1,read_time).&"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2:&1:&"
        }
      }
    }
  }
]

enter image description here

或者您可以使用another way,如下所示:

[
  {
    "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 operation分别创建keysvalues.

2, Modify operation将全部keys:相加.

3, Shift operation创建我们想要的输出.

Note:为了更好地理解这段代码,请分别运行每个规范.

Json相关问答推荐

jq不会为空输入返回非零

如何使用Laravel在MariaDB JSON kolumn中使用unicode字符

由于无效的UTF-8开始字节0xa0,JSON被拒绝,但编码似乎有效

如何在PowerShell中访问嵌套的JSON字段

使用Kotlin限制序列化类属性的允许整数值

使用 jolt 变换展平嵌套 JSON - 非常复杂

当 JSON 字段名称有空格时,ABAP 中的 JSON 反序列化

在Databricks中如何将JSON文件作为字典读取

JOLT转换并向输出添加新数组

嵌套存储在字符串变量中的 JSON 对象

如何解决名为 null 的map值

JSON RPC - 什么是id?

Jackson 中的 readValue 和 readTree:何时使用哪个?

消息通知产生此内容无法显示

C#扁平化json struct

使用 API 搜索维基百科

在 React 中访问子级的父级状态

可以在 SharedPreferences 中保存 JSON 数组吗?

杰克逊在通用列表中读取 json

如何使用 Gson 将 JSONArray 转换为 List?