java - 如何从 JSONObject 的路径中获取嵌套值?

标签 java android json parsing

我正在尝试实现一个函数,给定任何 JSONObject 和路径 String,将返回与路径对应的对象属性。

例如,给定这个 json:

{
"name": "John", 
"friends": [
  {"name": "Paul",
   "age":42},
  {"name": "Peter",
   "age":24}
 ],
"address": {"city": "London"}
}
  • getAttribute(jsonObject, "name") 应该返回 "John"
  • getAttribute(jsonObject, "address.city") 应该返回 "London"
  • getAttribute(jsonObject, "friends[0].name") 应该返回 "Paul"

请注意,此 JSON 只是一个示例,jsonObject 没有预定义结构,可以表示任何有效的 json。

我编写了第一个版本来实现前两种情况,但是处理数组和多级数组 "foo[0][0].bar" 给这个函数带来了很多复杂性。

是否有推荐的工具/库/方法来从给定“复杂”路径的 JSONObject 获取属性?

最佳答案

JSONPath standard Stefan Goessner 涵盖了更复杂的语法,但它也处理“经典 javascript”JSON 路径语法。

使用 JayWay's implementation for Java , 回答这个问题很简单:

public String getAttribute(JSONObject json, String path) {
    return JsonPath.read(json.toString(), path);
}

关于java - 如何从 JSONObject 的路径中获取嵌套值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40783386/

相关文章:

java - 使 JPanel 看起来与 GridBagLayout 相同

android - AppWidgetHost 在主线程上创建 View

android - 当服务在后台运行时,异步任务无法正常工作(doInBackground 未执行),Android

java - 解析 JSON 时出错,但代码看起来没问题

java - java中无法同时读取两个文件

java - String Predicates 用于验证 String 是否包含 java 中的数值

iphone - 可以从 iPhone 和 Android 应用程序安全访问哪些常见后端?

python - 将字符串解析为 JSON

php - 如何在 mysql json 查询中选择多个字段?

java - 在displayMethod中使用printf和forEach,如何更改单个数组显示的间距