
在处理JSON数据转换时,JOLT是一个功能强大的工具,尤其适用于Nifi等数据流处理场景。本教程将深入探讨一个常见的JOLT转换需求:如何将一个扁平化的JSON输入结构,转换成一个包含单一复杂对象的数组。具体来说,我们将解决如何避免JOLT默认行为产生的“数组中每个键值对都独立成一个对象”的问题,转而将所有键值对聚合到数组的第一个(也是唯一一个)对象中。
假设我们有一个扁平化的输入JSON,其中包含一系列资产相关的属性:
输入 JSON 示例:
{
"AssetID": "1",
"AssetNumber": "2",
"AssetMaterial": "Cisco MDS 9706",
"RackUnits": "9.0",
"MaterialType": "Chassis",
"AssetName": "Cisco-MDS-9706_1",
"CustRID": "A001",
"SerialNumber": "OU812",
"Room": "ROOM5",
"Datacenter": "DC69",
"UMountingID": "86",
"CabinetAssetID": "181",
"CabinetName": "CAB666"
}我们希望将其转换成一个更结构化的输出,其中所有资产属性都嵌套在一个名为 data 的数组中,并且 data 数组只包含一个对象,该对象包含了所有转换后的属性。此外,还需要添加一些静态字段。
期望输出 JSON 示例:
{
"data" : [
{
"6" : {
"value" : "1"
},
"7" : {
"value" : "2"
},
"8" : {
"value" : "Cisco MDS 9706"
},
"9" : {
"value" : "Cisco-MDS-9706_1"
},
"10" : {
"value" : "A001"
},
"11" : {
"value" : "OU812"
},
"12" : {
"value" : "ROOM5"
},
"13" : {
"value" : "DC69"
},
"14" : {
"value" : "86"
},
"15" : {
"value" : "181"
},
"16" : {
"value" : "CAB666"
}
}
],
"to" : "table1",
"fieldsToReturn" : [ 6, 7, 8, 9, 10, 11, 12 ]
}然而,如果仅仅使用 data[].key.value 这样的路径,JOLT的默认行为会将每个 key.value 对都生成为一个独立的子对象,并将其添加到 data 数组中,导致输出结构与期望不符。
常见错误输出 JSON 示例 (每个键值对一个独立对象):
本文档主要讲述的是j2me3D游戏开发简单教程; 如今,3D图形几乎是任何一部游戏的关键部分,甚至一些应用程序也通过用3D形式来描述信息而获得了成功。如前文中所述,以立即模式和手工编码建立所有的3D对象的方式进行开发速度很慢且很复杂。应用程序中多边形的所有角点必须在数组中独立编码。在JSR 184中,这称为立即模式。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
0
{
"data": [
{ "6": { "value": "1" } },
{ "7": { "value": "2" } },
// ... 更多独立对象 ...
{ "16": { "value": "CAB666" } }
],
"to": "table1",
"fieldsToReturn": [ 6, 7, 8, 9, 10, 11, 12 ]
}要解决上述问题,关键在于利用JOLT shift 操作的路径表达式,将所有转换后的键值对显式地指向数组的同一个索引位置。最直接的方法是使用 data[0]. 来确保所有数据都汇聚到 data 数组的第一个元素中。
以下是实现期望输出的JOLT规范:
[
{
"operation": "shift",
"spec": {
"AssetID": "data[0].6.value",
"AssetNumber": "data[0].7.value",
"AssetMaterial": "data[0].8.value",
"AssetName": "data[0].9.value",
"CustRID": "data[0].10.value",
"SerialNumber": "data[0].11.value",
"Room": "data[0].12.value",
"Datacenter": "data[0].13.value",
"UMountingID": "data[0].14.value",
"CabinetAssetID": "data[0].15.value",
"CabinetName": "data[0].16.value",
// 添加静态值到输出根目录
"#table1": "to"
}
},
{
"operation": "default",
"spec": {
"fieldsToReturn": [6, 7, 8, 9, 10, 11, 12]
}
},
{
"operation": "sort"
}
]shift 操作的核心:data[0].
default 操作
sort 操作 (可选)
通过本教程,我们学习了如何利用JOLT shift 操作中固定数组索引 data[0] 的强大功能,将扁平化JSON中的多个键值对有效地聚合到一个单一的数组对象中。这种技术在处理需要将多个属性合并为一个复杂实体的数据转换场景中非常实用。掌握 shift 操作的细微差别,特别是数组索引的使用,是编写高效且准确JOLT规范的关键。
以上就是JOLT转换:将数组中的独立对象合并为单一对象的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号