您好,我想用jslt来转换json,但是出现了无法解决的问题。
-
- 输入的json数据是这样的
{
"user_id": "001",
"friends": [{
"friend_id": "002"
}, {
"friend_id": "003"
}, {
"friend_id": "004"
}]
}
-
- 然后,我期望的输出 json 数据如下:
[{
"user_id": "001",
"friend_id": "002"
}, {
"user_id": "001",
"friend_id": "003"
}, {
"user_id": "001",
"friend_id": "004"
}]
-
- 在jslt表达式中,我使用for表达式来遍历数组字段啦:
[
for (.friends) {
"user_id": .user_id,
"friend_id": .friend_id
}
]
-
- 但是tresform结果无法获取字段user_id
[{
"friend_id": "002"
}, {
"friend_id": "003"
}, {
"friend_id": "004"
}]
如何访问与数组字段friends相关的范围之外的字段user_id? 期待您的帮助,谢谢!
最佳答案
另一个答案是正确的,但比需要的更复杂。这就足够了:
let user_id = (.user_id)
[ for (.friends) { "user_id": $user_id , "friend_id" : .friend_id } ]
请注意,如果您确实想报告错误,可以这样做:
if (.user_id and .friends)
let user_id = (.user_id)
[ for (.friends) { "user_id": $user_id , "friend_id" : .friend_id } ]
else if (not(.user_id))
error("user_id field missing")
else
error("friends field missing")
使用 error
将其转变为 Java 级别的异常。
不支持父运算符的原因是 Jackson 在其节点中没有父指针。这是一个性能特性,因为它意味着节点可以在多个地方重复使用,从而节省 CPU 和内存。
关于json - jslt访问for表达式中的父字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65216800/