使用JSONPath从JSON对象获取单个值

使用JSONPath从JSON对象获取单个值,json,jsonpath,Json,Jsonpath,我有以下JSON,需要使用以下命令获取普通的name值: 我使用的表达式是$.single.name,但我总是得到一个数组: [ "Item name" ] 而不是字符串值(“Item name”)。但我总是得到一个数组: [ "Item name" ] 这是注定要发生的。如您所见,在“结果”下(几乎在底部): 请注意,jsonPath的返回值是一个数组,它是 也是一个有效的JSON结构。因此,您可能希望将jsonPath应用于 再次创建结果结构或使用您最喜欢的数组之一 方法与之排序 所以基

我有以下JSON,需要使用以下命令获取普通的
name
值:

我使用的表达式是
$.single.name
,但我总是得到一个数组:

[ "Item name" ]
而不是字符串值(
“Item name”
)。

但我总是得到一个数组:

[ "Item name" ]
这是注定要发生的。如您所见,在“结果”下(几乎在底部):

请注意,jsonPath的返回值是一个数组,它是 也是一个有效的JSON结构。因此,您可能希望将jsonPath应用于 再次创建结果结构或使用您最喜欢的数组之一 方法与之排序

所以基本上它总是返回一个数组。如果您需要将数据作为其他类型,例如本例中的字符串,恐怕您必须自己进行转换。

我使用的是JSONPath,并且遇到了同样的问题。对我来说,有效的方法是将“[0]”添加到json路径字符串中。因此,在你的情况下:


$.single.name[0]

我认为,这取决于语言实现

例如,在nodejs中有一个npm模块:

它有一个名为value的方法,它正好满足我们的需要

jp.value(对象,路径表达式[,newValue])

返回与pathExpression匹配的第一个元素的值。如果提供了newValue,则设置第一个匹配元素的值并返回新值


我试过了,成功了

以防出现此错误

“无法获取表达式$.yourfield的标量值”

您只需通过将返回类型属性值更改为'json'而不是'auto-detect'来配置EvaluateJsonPath处理器


是的,我得出了这个结论。我问这个问题的原因是想看看我是否缺少了一点JSONPath语法,它可以让我得到结果数组的第一个元素,而不是整个数组。@Ilija遗憾的是没有。但是我检查了源代码,它不是很复杂,也许您可以做一些修改,让它在需要时返回数组以外的内容。是的,我最终这样做了(如果路径以
~ first
结尾,它将返回结果数组的第一个元素)。我讨厌这样做,但是如果没有其他方法……如果你像我一样来到这里,你可能只需要在JSONPath查询的末尾添加
[*]
。它压平了为我返回的数组。我遇到了类似的问题,但带有表达式。我想从数组中获取单个对象和该对象的单个值,但这不起作用:
data[?(@.id==9617)][0]。is_favorite
这也不起作用
data[?(@.id==9617)][0]。is_favorite
首先提供一个数据示例。这里是
{state:{apiVersion:“V3_0”,errorLevel:0,errorMessage:null,errorLink:null},数据:[{id:94617,is_favorite:true,vip_sub_优惠:[],代金券:[{id:11613004,代码:“F8JL2”,优惠:94617,subOffer:1613,有效至:“2016-05-20T23:59:59.000”,状态:“USED”,状态代码:2,获得类型:“NORMAL”,重定向URL:null,电话号码:null,消息文本:null,shopId:94614,分配时间:“2016-05-19T00:00:03.000”,使用时间:“2016-05-19T00:00:00.000”}]
Java实现在使用谓词表达式后无法应用[0]。它显然不符合规范: