json - 如何使用 NiFi 将平面 JSON 转换为嵌套 JSON
问题描述
输入 JSON :
{
"type": "mbrInfo",
"csId": 123456789,
"insTS": "14-07-201911:55",
"seqId": 1234565,
"title": "Mr",
"fName": "Amit",
"mName": "",
"lName": "V",
"suffix": "Engg",
"lvlId": "P",
"lvlType": "LAC",
"acctStatus": "20",
"enrlDT": "2016-08-29",
"vrsnId": 1
}
预期输出 JSON:
{
"type": "mbrInfo",
"csId": 123456789,
"insTS": "14-07-201911:55",
"seqId": 1234565,
"name" : [{
"title": "Mr",
"fName": "Amit",
"mName": "",
"lName": "V",
"suffix": "Engg"}],
"lvlId": "P",
"lvlType": "LAC",
"acctStatus": "20",
"enrlDT": "2016-08-29",
"vrsnId": 1
}.
目前我正在使用带有 JOLT Spec 的 JOLTtransformJSON 处理器:
[
{
"operation": "shift",
"spec": {
"name": {
"$": "[#1]",
"@.title": "[#1].title",
"@.fName": "[#1].fName",
"@.mName": "[#1].mName",
"@.lName": "[#1].lName",
"@.suffix": "[#1].suffix"
}
}
}
]
但我得到的只是 NULL 或原始 JSON(带有差异规范)作为输出。提前致谢。
解决方案
是否打算将所有名称字段放入包含对象的 1 元素数组中。此 JOLT 规范将它们放入name
现场的对象中:
[
{
"operation": "shift",
"spec": {
"title": "name.title",
"fName": "name.fName",
"mName": "name.mName",
"lName": "name.lName",
"suffix": "name.suffix",
"*": "&"
}
}
]
...并且此规范将它们放入现场的 1 元素数组中name
:
[
{
"operation": "shift",
"spec": {
"title": "name[0].title",
"fName": "name[0].fName",
"mName": "name[0].mName",
"lName": "name[0].lName",
"suffix": "name[0].suffix",
"*": "&"
}
}
]
我在输入中没有看到任何其他位置来获取数组的索引,所以我只使用了0
.
推荐阅读
- javascript - api代理服务器未将数据解析回用户CORS
- ubuntu - 使用命令行在 Virtualbox 上启动 Ubuntu 虚拟客户机
- python - Pandas 中的逐行字符串连接
- typescript - 创建变量时是否有更简洁的方法来使用本地范围?
- python - Django server 403 (CSRF token missing or incorrect)
- javascript - 如何在 JavaScript 中包装 HTML 以便遍历字典并添加到 flex 容器中?
- ruby-on-rails - 检查输入是否==整数/浮点数?使用 irb
- laravel - Laravel - 查看文件夹被反复删除
- c# - 在两个 Mongo 集合上加入然后子查询
- python - Python中的类实现