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

问题描述 投票:16回答:3

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

{
  "single" : {
    "id" : 1, 
    "name" : "Item name"
  }
}

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

[ "Item name" ]

而不是字符串值("Item name")。

json jsonpath
3个回答
14
投票

但我总是得到一个数组:

这意味着要发生。你可以在this documentation中看到'结果'(几乎在底部):

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

所以基本上它总会返回一个数组。如果您需要将数据作为其他类型,例如在这种情况下,你必须自己进行转换,我担心。


7
投票

我使用的是JSONPath的Java implementation并遇到了同样的问题。对我有用的是在json路径字符串中添加“[0]”。所以在你的情况下:

$.single.name[0]


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"))).
© www.soinside.com 2019 - 2024. All rights reserved.