我有以下JSON,我需要使用JSONPath获取普通name
值:
{
"single" : {
"id" : 1,
"name" : "Item name"
}
}
我使用的表达式是$.single.name
,但我总是得到一个数组:
[ "Item name" ]
而不是字符串值("Item name"
)。
答案 0 :(得分:14)
但我总是得到一个数组:
这意味着要发生。您可以在this documentation中阅读“结果”(几乎在底部):
请注意,jsonPath的返回值是一个数组,即 也是一个有效的JSON结构。所以你可能想要应用jsonPath 再次得到的结构或使用您最喜欢的数组之一 用它排序的方法。
所以基本上它总会返回一个数组。如果您需要将数据作为其他类型,例如在这种情况下,你将不得不自己进行转换。
答案 1 :(得分:7)
我正在使用JSONPath的Java implementation并遇到了同样的问题。对我有用的是添加' [0]'到json路径字符串。所以在你的情况下:
$.single.name[0]
答案 2 :(得分:0)
我知道这是一个老问题,但是在为Spring Boot应用程序编写单元测试时,以下对我有用。希望这对处于类似情况的人有所帮助。
如Tim Castelijns所述,结果始终是一个数组。
Json示例
{
"validationErrors": [
{
"field": "location",
"message": "must not be null"
},
{
"field": "address",
"message": "must not be blank"
},
{
"field": "id",
"message": "must be null"
},
{
"field": "name",
"message": "must not be blank"
}
]
}
和单元测试部分
//verify if the id is validated for null
andExpect((ResultMatcher) jsonPath("$.validationErrors[?(@.field=='id')].message").isArray()).
andExpect((ResultMatcher) jsonPath("$.validationErrors[?(@.field=='id')].message",hasItem("must be null"))).
答案 3 :(得分:0)
我认为,这取决于语言的实现。
例如在nodejs中,有一个npm模块:https://www.npmjs.com/package/jsonpath
其中有一个名为 value 的方法,该方法正是我们所需要的
jp.value(obj,pathExpression [,newValue])
返回与pathExpression匹配的第一个元素的值。如果提供了newValue,则设置第一个匹配元素的值并返回新值。
我尝试过并且工作了!
答案 4 :(得分:0)