我有以下JSON,我需要使用name
获取普通的JSONPath值:
{
"single" : {
"id" : 1,
"name" : "Item name"
}
}
我使用的表达式是$.single.name
,但我总是得到一个数组:
[ "Item name" ]
而不是字符串值("Item name"
)。
但我总是得到一个数组:
这意味着要发生。你可以在this documentation中看到'结果'(几乎在底部):
请注意,jsonPath的返回值是一个数组,它也是一个有效的JSON结构。因此,您可能希望再次将jsonPath应用于生成的结构,或者使用您喜欢的数组方法之一进行排序。
所以基本上它总会返回一个数组。如果您需要将数据作为其他类型,例如在这种情况下,你必须自己进行转换,我担心。
我使用的是JSONPath的Java implementation并遇到了同样的问题。对我有用的是在json路径字符串中添加“[0]”。所以在你的情况下:
$.single.name[0]
我知道这是一个老问题,但是在为spring启动应用程序编写单元测试时,以下内容对我有用。希望这可以帮助处于类似情况的人。
正如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"))).