如何在modify-overwrite-beta操作中用=toString转换嵌套对象值为字符串
问题:Jolt实现多层嵌套对象中所有value值转字符串
需要处理包含上千个键的多层嵌套JSON对象,要求将所有层级(外层及各嵌套对象内)的value字段值转换为字符串。此前尝试使用modify-overwrite-beta操作,指定单个value字段用=toString,同时用*匹配所有键,但会将整个嵌套对象转为字符串,破坏原有结构,现需解决深层嵌套场景的转换问题。
输入示例
{ "value": 3, "primary": { "value": 3 }, "quality": { "value": 3 } }
期望输出
{ "value" : "3", "primary" : { "value" : "3" }, "quality" : { "value" : "3" } }
尝试的Jolt规则
[ { "operation": "modify-overwrite-beta", "spec": { "primary": { "value": "=toString" }, "*": "=toString" } } ]
当前错误输出
{ "value" : "3", "primary" : "{value=3}", "quality" : "{value=3}" }
更新后的深层嵌套输入示例
{ "value": 3, "primary": { "value": { "a": { "value": 3 } } }, "quality": { "value": 3 } }
解决方案
使用Jolt的递归匹配语法,针对所有层级的value字段单独处理,避免将整个对象转为字符串。正确的Jolt规则如下:
[ { "operation": "modify-overwrite-beta", "spec": { "*": { // 递归处理所有嵌套对象 "*": "&1", // 匹配当前层级的value字段,转为字符串 "value": "=toString" }, // 处理外层的value字段 "value": "=toString" } } ]
规则说明
*: 匹配当前层级的所有键"*": "&1": 对当前层级下的所有嵌套对象,递归应用当前的spec规则,实现深层遍历"value": "=toString": 对每一层级的value字段单独执行转字符串操作,不会影响其所在的嵌套对象结构
这个规则可以处理任意深度的嵌套对象,确保所有层级的value值都转为字符串,同时保留原有的JSON结构。
内容的提问来源于stack exchange,提问作者Arnold Joseph
相关产品推荐
相关产品推荐

