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

PLN*_*ech 5 java parsing android json

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

例如,给定以下json:

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

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

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

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

PLN*_*ech 5

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

使用JayWay 的 Java 实现,回答这个问题很简单:

public String getAttribute(JSONObject json, String path) {
    return JsonPath.read(json.toString(), path);
}
Run Code Online (Sandbox Code Playgroud)