json - jslt访问for表达式中的父字段

标签 json jslt

您好,我想用jslt来转换json,但是出现了无法解决的问题。

    1. 输入的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/

相关文章:

Java Controller 未将 JSON 转换为实体

javascript - 如何在 XMLhttp Post 请求中传递多个文件值

json - 使用 pandas 在列中加载 Json 数据多个值

java - JSON Jersey JAXB

javascript - Backbone.js:一个嵌套的 JSON 响应还是多个 JSON 响应?