如何使用 json 路径从 json 字符串中获取 json 节点值?

How do I get a json node value from json string using json path?

下面是我的JSON文件

{
  "squadName": "Super hero squad",
  "homeTown": "Metro City",
  "formed": 2016,
  "secretBase": "Super tower",
  "active": true,
  "members": [
    {
      "name": "Molecule Man",
      "age": 29,
      "secretIdentity": "Dan Jukes",
      "powers": [
        "Radiation resistance",
        "Turning tiny",
        "Radiation blast"
      ]
    },
    {
      "name": "Madame Uppercut",
      "age": 39,
      "secretIdentity": "Jane Wilson",
      "powers": [
        "Million tonne punch",
        "Damage resistance",
        "Superhuman reflexes"
      ]
    },
    {
      "name": "Eternal Flame",
      "age": 1000000,
      "secretIdentity": "Unknown",
      "powers": [
        "Immortality",
        "Heat Immunity",
        "Inferno",
        "Teleportation",
        "Interdimensional travel"
      ]
    }
  ]
}

并且 JSON 检索所有成员名称的路径是 - $.members[*].name

我正在使用 Ready API 和 Groovy 脚本通过上面提到的路径读取这个 json,但是我遇到了一条错误消息,上面写着 java.lang.NoClassDefFoundError: Could not initialize class net.minidev.json.JSONValue我执行下面的代码

import com.jayway.jsonpath.*

Object dataObject = JsonPath.parse(jsonmentionedabove).read(
'$.members[*].name')

我的 Ready API lib 和 ext 文件夹中有以下 jars,我的 PC 上有 java 版本 - 9.0.1

json-path-2.4.0, json-smart-2.3

请问是什么原因导致了这个问题?

我不熟悉 Ready API 或 json-path 和 json-smart 库,但是使用纯 groovy 你可以这样做:

import groovy.json.*

def str  = """<the json string in your question>"""
def json = new JsonSlurper().parseText(str)
def memberNames = json.members*.name

println memberNames.join(", ")

执行时会打印:

Molecule Man, Madame Uppercut, Eternal Flame

JsonSlurper returns 一个 java.util.Map 地图结构,可以使用正常 groovy findAllcollect 等操作或 [=15] 进行导航=] (*.) 如上。

将 asm-1.0.2.jar 文件放入 Ready API lib 文件夹解决了问题。