如何在JSONata中使用变量/动态路径获取目标数据?
动态适配JSONata查询路径获取动态键值
源JSON示例
{ "Player1": "Ryan", "Player2": "Nathan", "score": [ { "match1": { "Ryan|Nathan": [ { "Round1": { "total": 500 } } ] } } ] }
固定路径的查询方式
如果Player1和Player2的值固定,查询total的JSONata语句是:
{ "Score": score.match1.`Ryan|Nathan`[0].Round1.total }
对应的查询结果:
{ "Score": 500 }
动态键的适配需求
当Player1和Player2的值动态变化(比如改成Will和Max,对应键名变成Will|Max)时,需要让查询路径自动匹配新的键名。之前尝试过拼接路径字符串:
"score.match1.`" & Player1 & "|" & Player2 & "`[0].Round1.total"
但不知道怎么把这个字符串当作路径来用。
正确的动态查询方法
不用拼接字符串路径,JSONata支持直接用方括号做动态键访问,把拼接后的键名放进方括号里就行:
{ "Score": score.match1[Player1 & "|" & Player2][0].Round1.total }
为什么这么做可行
Player1 & "|" & Player2会自动拼接出目标键名,比如Ryan|Nathan或者Will|Max- 用
[动态键名]的方式替代固定的.+反引号语法,就能动态访问对应的属性 - 后面的
[0].Round1.total路径保持不变,继续访问嵌套结构就行
实际测试效果
如果源JSON换成下面这样:
{ "Player1": "Will", "Player2": "Max", "score": [ { "match1": { "Will|Max": [ { "Round1": { "total": 750 } } ] } } ] }
用上面的动态查询语句,返回结果就是:
{ "Score": 750 }
内容的提问来源于stack exchange,提问作者Akshit
相关产品推荐
相关产品推荐

