|
| 1 | +----------------- |
| 2 | +jsonpath | |
| 3 | +----------------- |
| 4 | + # 类似于XPATH, 用于解析访问 json |
| 5 | + * 如果json体非常的复杂, 嵌套很深的话, 一层层的去访问非常的难受, |
| 6 | + * 就可以选择使用这种快速查找的表达式 |
| 7 | + |
| 8 | + |
| 9 | +----------------- |
| 10 | +JSONPath | |
| 11 | +----------------- |
| 12 | + # 构造方法 |
| 13 | + public JSONPath(String path) |
| 14 | + public JSONPath(String path, SerializeConfig serializeConfig, ParserConfig parserConfig) |
| 15 | + |
| 16 | + # 静态属性/方法 |
| 17 | + public static Object eval(Object rootObject, String path) |
| 18 | + public static Object extract(String json, String path, ParserConfig config, int features, Feature... optionFeatures) |
| 19 | + public static Object extract(String json, String path) |
| 20 | + * 根据path检索值 |
| 21 | + * extract,按需计算, 性能会更好 |
| 22 | + |
| 23 | + public static int size(Object rootObject, String path) |
| 24 | + * 计算Size |
| 25 | + * Map非空元素个数, 对象非空元素个数, Collection的Size, 数组的长度 |
| 26 | + * 其他无法求值返回-1 |
| 27 | + |
| 28 | + public static Set<?> keySet(Object rootObject, String path) |
| 29 | + * 获取, Map的KeySet, 对象非空属性的名称 |
| 30 | + * 数组, Collection等不支持类型返回null |
| 31 | + |
| 32 | + public static boolean contains(Object rootObject, String path) |
| 33 | + * 是否包含, path中是否存在对象 |
| 34 | + |
| 35 | + public static boolean containsValue(Object rootObject, String path, Object value) |
| 36 | + * 是否包含, path中是否存在指定值 |
| 37 | + * 如果是集合或者数组, 在集合中查找value是否存在 |
| 38 | + |
| 39 | + public static void arrayAdd(Object rootObject, String path, Object... values) |
| 40 | + * 在数组或者集合中添加元素, 添加成功返回 true,失败返回 false |
| 41 | + |
| 42 | + public static boolean set(Object rootObject, String path, Object value) |
| 43 | + * 修改制定路径的值, 如果修改成功, 返回true, 否则返回false |
| 44 | + |
| 45 | + public static boolean remove(Object root, String path) |
| 46 | + * 删除指定path的元素, 删除成功返回 true,失败返回 false |
| 47 | + |
| 48 | + public static JSONPath compile(String path) |
| 49 | + * 编译一个jsonpath为对象 |
| 50 | + |
| 51 | + public static Object read(String json, String path) |
| 52 | + * 从一个json字符串中, 根据指定的path读取为Json对象 |
| 53 | + |
| 54 | + public static Map<String, Object> paths(Object javaObject) |
| 55 | + public static Map<String, Object> paths(Object javaObject, SerializeConfig config) |
| 56 | + * 返回指定Java对象的属性的所有json访问path |
| 57 | + |
| 58 | + # 实例方法 |
| 59 | + * 实例方法跟上述的静态方法差不多, 只是不需要 path 参数 |
| 60 | + * 因为构造的时候已经设置, 类似于 Pattern |
| 61 | + |
| 62 | + |
| 63 | + |
| 64 | +----------------- |
| 65 | +支持语法 | |
| 66 | +----------------- |
| 67 | + JSONPATH 描述 |
| 68 | + $ 根对象, 例如$.name |
| 69 | + [num] 数组访问, 其中num是数字,可以是负数, 例如:$[0].leader.departments[-1].name |
| 70 | + [num0,num1,num2...] 数组多个元素访问, 其中num是数字, 可以是负数, 返回数组中的多个元素,例如:$[0,3,-2,5] |
| 71 | + [start:end] 数组范围访问, 其中start和end是开始小表和结束下标, 可以是负数, 返回数组中的多个元素, 例如:$[0:5] |
| 72 | + [start:end :step] 数组范围访问, 其中start和end是开始小表和结束下标, 可以是负数,step是步长, 返回数组中的多个元素例如:$[0:5:2] |
| 73 | + [?(key)] 对象属性非空过滤, 例如:$.departs[?(name)] |
| 74 | + [key > 123] 数值类型对象属性比较过滤,例如:$.departs[id >= 123],比较操作符支持:=,!=,>,>=,<,<= |
| 75 | + [key like 'aa%'] 字符串类型like过滤,例如:$.departs[name like 'sz*'], 通配符只支持:% 支持:not like |
| 76 | + [key rlike 'regexpr'] 字符串类型正则匹配过滤,:例如departs[name like 'aa(.)*'], 正则语法为jdk的正则语法, 支持:not rlike |
| 77 | + [key in ('v0', 'v1')] IN过滤, 支持字符串和数值类型,例如: $.departs[name in ('wenshao','Yako')] $.departs[id not in (101,102)] |
| 78 | + [key between 234 and 456] BETWEEN过滤, 支持数值类型,支持not between 例如: $.departs[id between 101 and 201] $.departs[id not between 101 and 201] |
| 79 | + length() 或者 size() 数组长度, 例如$.values.size() 支持类型java.util.Map和java.util.Collection和数组 |
| 80 | + keySet() 获取Map的keySet或者对象的非空属性名称, 例如$.val.keySet() 支持类型:Map和普通对象,不支持:Collection和数组(返回 null) |
| 81 | + . 属性访问, 例如$.name |
| 82 | + ['key'] 属性访问, 例如$['name'] |
| 83 | + ['key0','key1'] 多个属性访问, 例如$['id','name'] |
| 84 | + .. deepScan属性访问,例如$..name |
| 85 | + * 对象的所有属性, 例如$.leader.* |
| 86 | + |
| 87 | + |
| 88 | + |
0 commit comments