You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JsonPath(JayWay)拼接JSON返回结果的字段值

问题核心原因

所有写法出错的根源是错误使用了$..递归深度扫描运算符:

  • $..的作用是递归遍历整个JSON树,匹配所有符合后缀名的节点,无论匹配到多少个结果,返回值永远是数组类型,哪怕只匹配到1个字段,也不会返回单个标量值。
  • 你需要取的firstName、lastName是根节点下的直接属性,根本不需要递归扫描,用$..从一开始就走错了路径逻辑。
各异常返回的具体解释
  • $..concat($..firstName," ",$..lastName)返回空值:
    $..concat的语义是递归遍历整个JSON,查找名为concat的属性。你的原始JSON结构里根本不存在concat这个key,匹配结果为空数组,整个表达式自然返回空。同时传入的参数$..firstName、$..lastName本身也是数组类型,不是字符串,即使走到concat函数逻辑,也无法完成字符串拼接。
  • $..concat("+",$..lastName)返回+["lastNameUser"]格式结果:
    部分JsonPath实现遇到不存在的路径时,会直接把后续参数做字符串拼接返回。这里$..lastName是递归扫描得到的数组(比如你的样例里扫描结果是["iConsulto"]),数组转字符串时会自带方括号,和前缀+拼接后就出现了你看到的列表格式异常结果。
  • $..concat("+",$..lastName[0])不生效:
    下标[0]的作用是取$..lastName返回数组的第一个元素,但整个表达式的前缀$..concat是无效路径,执行逻辑根本不会走到取下标、拼接的步骤,自然得不到预期结果。
正确实现方式

注意:标准JsonPath规范本身没有定义字符串拼接函数,不同语言、不同版本的JsonPath实现对自定义函数的支持差异很大,分两种场景处理:

  1. 如果你使用的实现支持concat函数(比如Java生态的Jayway JsonPath 2.4及以上版本),直接用根路径单点取值传入函数即可,正确写法:
$.concat($.firstName, " ", $.lastName)

执行后会返回预期结果Admin iConsulto。
2. 如果你使用的实现不支持concat函数(比如原生JS的Goessner JsonPath、多数轻量JsonPath库),不要强行在JsonPath表达式里做拼接,兼容性最好的方案是分两次取值,在业务代码层完成拼接:
- 执行$.firstName取到名字字段值
- 执行$.lastName取到姓氏字段值
- 用你所用编程语言的原生字符串拼接方法,把两个值加空格拼接即可,完全不会出现类型不匹配、路径无效的问题。

内容的提问来源于stack exchange,提问作者mz0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:18:21