Jolt 将多个对象转换为具有新字段名称的数组
Posted
技术标签:
【中文标题】Jolt 将多个对象转换为具有新字段名称的数组【英文标题】:Jolt transform several object to array with new field name 【发布时间】:2022-01-19 09:55:44 【问题描述】:我是使用 jolt 工具的新手,我想知道是否有办法获取几个 json 对象并将它们放入一个具有如下新字段的数组中:
输入:
"userId": 1,
"age": 20,
"desc1": "value desc1",
"desc2": "value desc2",
"desc3": "value desc3"
JSON 规范:
[
"operation": "shift",
"spec":
"userId": "ID",
"age": "age",
"*": "additionalInformation"
]
预期结果:
"ID": 1,
"age": 20,
"additionalInformation": [
"code": "desc1",
"value": "value desc1"
,
"code": "desc2",
"value": "value desc2"
,
"code": "desc3",
"value": "value desc3"
]
使用上面的规范我只能得到这个结果:
"ID": 1,
"test": 20,
"additionalInformation": [
"value desc1",
"value desc2",
"value desc3"
]
有什么我错过的建议吗?
【问题讨论】:
【参考方案1】:$ 和 @ 通配符可以分别用于 code 和 value,同时组合 common 下的元素在第一步中使用 &. 作为它们的前缀。然后在上一步将ID和age以外的元素合并到同一个数组中,如
[
"operation": "shift",
"spec":
"userId": "ID",
"age": "age",
"*":
"$": "&.code",
"@": "&.value"
,
"operation": "shift",
"spec":
"ID": "&",
"age": "&",
"*": "additionalInformation[]"
]
编辑(由于评论):如果您需要选择一些单独的元素,例如 desc1 和 desc3 而不是 all("*"),然后将第一个规范替换为以下
"operation": "shift",
"spec":
"userId": "ID",
"age": "age",
"desc1|desc3":
"$": "&.code",
"@": "&.value"
【讨论】:
非常感谢@Barbaros,这正是我所期待的。但是,如果我们只需要选择特定字段将它们放入数组中(例如 desc1 和 desc3),则通配符无法做到这一点,因为它需要所有其他可用字段 感谢您的帮助。我最终使用了在文档中找到的另一种方式也适合我的需要,但是我仍然很难删除在上面屏幕中提到的输出中生成的空值。有什么建议吗? 嗨@Yawyaw1。让我们通过恢复上次更新来保留这个问题,因为它已经被回答了,并且请在添加新规范的同时询问另一个问题。以上是关于Jolt 将多个对象转换为具有新字段名称的数组的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript:将具有父键的对象数组转换为父/子树(包括没有父的对象)
如何将数据从多个输入字段转换为单个 JSON 对象以进一步将其插入单个 mysql 字段