JsonPath 对于 JSON 来说相当于 XPATH 对于 XML,你也想过用如下表达式获取list吧。而不用一个一个jsonobject去遍历;
List<String> list = JsonPath.read(json,
"$..ns:items[?(@.ns:dataName == 'Installaddr')].ns:dataValue");
类似这样获取json中相同对象中的元素,jsonpath的表达式详见:
JsonPath的语法
JsonPath是一种类似XPATH的语法,下表是两者语法的对比:
XPath | JSONPath | 描述 |
/ | $ | 根节点 |
. | @ | 现行节点 |
/ | . or [] | 取子节点 |
.. | n/a | 取父节点,Jsonpath未支持 |
// | .. | recursive descent(就是不管位置,选择所有符合条件的条件). JSONPath 从 E4X规范中继承了这个语法的使用法。 |
* | * | 匹配所有元素节点 |
@ | n/a | 根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要。 |
[] | [] | 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等) |
| | [,] | 支持迭代器中做多选。 |
n/a | [start:end:step] | 从ES4规范继承的切片方法(非常实用) |
[] | ?() | 支持过滤操作. |
n/a | () | 支持表达式计算 |
() | n/a | 分组,JsonPath不支持 |
更多表达式参照:
http://goessner.net/articles/JsonPath/
依赖包下载附件。