json - 如何使用 json 路径从 json 字符串中获取 json 节点值?
问题描述
下面是我的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 返回一个 map 结构的 java.util.Map ,可以使用普通的 groovy findAll
、collect
等操作或上述的spad 运算符( *.
) 进行导航。
推荐阅读
- python - 如何将 dataframe.iat 与字符串列索引一起使用
- reactjs - React/Redux 表单重新渲染方法
- java - 如何修复“错误:二元运算符'||'的错误操作数类型 “在java中
- c++-winrt - 如何读取更新后的 C++/WinRT/XAML UWP 应用的命令行参数
- css - Semantic UI React整页网格,如何隐藏溢出的列内容?
- python - 如何在循环中增加 i 以使用 python 选择不同的列
- clion - 在 Clion 中如何导航到所有编译错误?
- javascript - 如何使用 innerHTML 更新大小为 X 的数组?
- wordpress - 建立复杂的 WooCommerce 商店的最佳方式
- javascript - 来自外部的 Reactjs Dom 操作