如何用硬编码方式在JSONPath中使用append函数追加数组?
JSONPath中使用append函数硬编码追加数组的方法
问题背景
给定测试JSON数据:
{ "book": [{ "category": "reference" }, { "category": "fiction" } ], "rndarr": ["foo", 10] }
尝试用硬编码数组调用append函数时遇到异常:
- 执行
$.book.append(["foo",10]),返回结果中10丢失 - 执行
$.book.append([10]),返回格式异常,得到"10]"
预期是将整个数组作为单个元素追加到book数组中,而引用已存在数组$.book.append($.rndarr)可以得到预期结果。核心问题:能否通过硬编码方式编写实现该需求的JSONPath表达式?
解决方案
可以通过硬编码方式实现,问题源于你之前的表达式不符合所用JSONPath实现的语法解析规则。以常见的Jayway JSONPath为例,推荐使用以下两种写法:
方法1:使用$()构造字面量数组(兼容性最优)
$.book.append($(["foo", 10]))
$()是JSONPath中用于创建字面量值的标准语法,用它包裹数组可以确保解析器将整个数组识别为单个参数传递给append函数,避免拆分解析错误。- 执行后得到预期结果:
{ "book": [ {"category": "reference"}, {"category": "fiction"}, ["foo", 10] ], "rndarr": ["foo", 10] }
方法2:单引号包裹数组元素(部分实现支持)
如果你的JSONPath实现支持单引号作为字符串分隔符,也可以尝试:
$.book.append(['foo', 10])
这种写法更简洁,但兼容性不如$()语法,需根据所用实现调整。
内容的提问来源于stack exchange,提问作者bosskay972
相关产品推荐
相关产品推荐

