
在数据处理和集成场景中,经常需要对json数据结构进行转换,其中数组字段的处理是一个常见且具有挑战性的任务。例如,可能需要从数组中提取特定元素(如第一个),或者将数组的每个元素转换为独立的字段。然而,在进行此类转换时,必须严格遵守json规范,特别是关于对象中键的唯一性。一个json对象不允许包含多个同名键,这意味着不能简单地将一个包含多个元素的数组直接转换为多个同名键的字段。
本教程将通过具体的Jolt转换示例,演示如何优雅地处理这些场景,包括:
有时,我们只需要数组中的第一个元素,并希望将其从原始位置移动到父级或同级位置。例如,将嵌套在data对象中的propertyKey2数组的第一个元素提取到根级别。
原始输入数据示例:
{
"firstAttribute": true,
"secondAttribute": "12",
"data": {
"propertyKey1": "1",
"propertyKey2": [
"a"
],
"propertyKey3": "2",
"propertyKey4": "3",
"propertyKey_test": [
"option1",
"option2",
"option3"
],
"propertyKey5": "4",
"propertyKey6": "87.0"
},
"Keytest1": "value1",
"KeyTest2": "value2"
}Jolt Spec 示例(仅处理propertyKey2):
以下Jolt Spec旨在将data.propertyKey2数组的第一个元素(即"a")提取出来,并将其作为根级别的一个新字段propertyKey2。
[
{
"operation": "shift",
"spec": {
"data": {
"propertyKey2": {
"0": "&1"
},
"*": {
"@": "data.&"
}
},
"*": {
"@": "&"
}
}
}
]Spec解释:
转换后的输出:
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
{
"firstAttribute" : true,
"secondAttribute" : "12",
"data" : {
"propertyKey1" : "1",
"propertyKey3" : "2",
"propertyKey4" : "3",
"propertyKey_test" : [ "option1", "option2", "option3" ],
"propertyKey5" : "4",
"propertyKey6" : "87.0"
},
"propertyKey2" : "a",
"Keytest1" : "value1",
"KeyTest2" : "value2"
}当数组包含多个元素,且需要保留所有元素但又不能使用重复键时,一种常见的做法是将每个元素转换为一个独立的、带索引的新字段。例如,将data.propertyKey_test数组(["option1", "option2", "option3"])展开为data.propertyKey_test0, data.propertyKey_test1, data.propertyKey_test2。
Jolt Spec 示例(处理所有数组字段并展开):
以下Jolt Spec是一个更通用的解决方案,它不仅处理了propertyKey2的提取,还能够识别data对象中以propertyKey_开头的数组字段,并将其元素展开为带索引的新字段。
[
{
"operation": "shift",
"spec": {
"data": {
"propertyKey2": {
"0": "&1" // 将 propertyKey2 的第一个元素移到根级别
},
"propertyKey_*": { // 匹配所有以 "propertyKey_" 开头的字段,例如 propertyKey_test
"*": { // 匹配数组中的所有元素(索引 0, 1, 2...)
"@": "&3.&2&1" // 将元素值移动到 "data.propertyKey_testN" 形式的字段
}
},
"*": { // 匹配 data 中其他非数组或不匹配 "propertyKey_*" 模式的字段
"@": "&2.&" // 将它们保留在 data 内部
}
},
"*": { // 匹配根级别的其他字段
"@": "&" // 将它们保留在根级别
}
}
}
]Spec解释:
转换后的输出:
{
"firstAttribute" : true,
"secondAttribute" : "12",
"data" : {
"propertyKey1" : "1",
"propertyKey3" : "2",
"propertyKey4" : "3",
"propertyKey_test0" : "option1",
"propertyKey_test1" : "option2",
"propertyKey_test2" : "option3",
"propertyKey5" : "4",
"propertyKey6" : "87.0"
},
"propertyKey2" : "a",
"Keytest1" : "value1",
"KeyTest2" : "value2"
}Jolt为JSON数据转换提供了强大的能力,尤其在处理数组字段时,能够实现灵活且符合JSON规范的转换。通过本教程,我们学习了两种核心策略:提取数组的特定元素并重新定位,以及将数组元素展开为带索引的新字段。掌握Jolt的通配符、引用机制以及对JSON规范的理解,是编写高效、准确转换逻辑的关键。在实际应用中,应根据具体需求选择最合适的转换策略,并始终验证输出JSON的有效性。
以上就是Jolt JSON转换:数组字段的提取与展开策略的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号