JSLT中for表达式遍历数组时如何访问父级user_id字段?
解决JSLT遍历数组时访问父级字段的问题
这问题我之前处理类似需求时也踩过坑!你遇到的核心问题是循环内的上下文切换:当你用for (.friends)遍历数组时,循环体里的.已经指向数组中的单个friend对象了,这个对象里只有friend_id,自然拿不到外层的user_id。
两种可行的解决方法:
方法1:直接引用根节点上下文
在JSLT中,$代表整个原始输入的JSON根对象,所以你可以直接用$.user_id来获取外层的用户ID:
[ for (.friends) { "user_id": $.user_id, "friend_id": .friend_id } ]
方法2:提前保存父级字段到变量
如果层级更复杂,或者想让代码更清晰,你可以先把外层的user_id存成一个变量,再在循环里引用:
// 先把父级的user_id存到变量里 let $parent_user = .user_id [ for (.friends) { "user_id": $parent_user, "friend_id": .friend_id } ]
验证效果
把你的输入JSON代入上面任意一段JSLT表达式,都会得到你期望的输出:
[ { "user_id": "001", "friend_id": "002" }, { "user_id": "001", "friend_id": "003" }, { "user_id": "001", "friend_id": "004" } ]
内容的提问来源于stack exchange,提问作者gensheng
相关产品推荐
相关产品推荐

