fastjson(9)JSONpath 사용(1)
18770 단어 FastJSON
JSONPath API 소개
package com.alibaba.fastjson;
public class JSONPath {
// ,
public static Object eval(Object rootObject, String path);
// Size,Map , ,Collection Size, 。 -1
public static int size(Object rootObject, String path);
// ,path
public static boolean contains(Object rootObject, String path) { }
// ,path , , value
public static boolean containsValue(Object rootObject, String path, Object value) { }
// , , true, false
public static boolean set(Object rootObject, String path, Object value) {}
//
public static boolean array_add(Object rootObject, String path, Object... values);
}
JSONpath 대상 을 캐 시 하 는 것 을 권장 합 니 다.그러면 값 을 구 하 는 성능 을 향상 시 킬 수 있 습 니 다.
JSONPATH
묘사 하 다.
$
뿌리 원 소 를 나타 낸다
@
현재 요소
. or []
하위 요소
n/a
부모 요소
..
역귀 하강,JSONPath 는 E4X 에서 참고 한 것 이다.
*
모든 요 소 를 나타 내 는 마스크
?()
필터 표현 식 적용
[num]
배열 접근,그 중 num 은 숫자 이 고 마이너스 일 수 있 습 니 다.예 를 들 어$[0].leader.departments[-1].name
[num0,num1,num2…]
배열 의 여러 요소 에 접근 합 니 다.그 중에서 num 은 숫자 이 고 마이너스 일 수 있 으 며 배열 의 여러 요 소 를 되 돌려 줍 니 다.예 를 들 어$[0,3,-2,5]
[start:end]
배열 범위 에 접근 합 니 다.그 중에서 start 와 end 는 작은 시 계 를 시작 하고 아래 표 시 를 끝 냅 니 다.마이너스 일 수 있 습 니 다.배열 의 여러 요 소 를 되 돌려 줍 니 다.예 를 들 어$[0:5]
[start:end:step]
배열 범위 에 접근 합 니 다.그 중에서 start 와 end 는 작은 시 계 를 시작 하고 아래 표 시 를 끝 냅 니 다.마이너스 일 수 있 습 니 다.step 는 보폭 이 길 어서 배열 의 여러 요 소 를 되 돌려 줍 니 다.예 를 들 어$[0:5:2]
[ ?(key) ]
대상 속성 비 어 있 는 필터,예 를 들 어$.departs[?(name)]
[ key > 123]
수치 유형 대상 속성 비교 필터,예 를 들 어$.departs[id>=123],비교 연산 자 지원=,!=,>,>=,
[ key = ‘123’]
문자열 형식 대상 속성 비교 필터,예 를 들 어$.departs[name='123'],비교 연산 자 지원=,!=,>,>=,
[ key like ‘aa%’]
문자열 형식 like 필터,예 를 들 어$.departs[name like'sz*'],마스크 는%만 지원 합 니 다 not like
[ key rlike ‘regexpr’]
문자열 형식 은 필터 와 일치 합 니 다.예 를 들 어 departs[name like'aa(.)*'],정규 문법 은 jdk 의 정규 문법 입 니 다.not rlike 를 지원 합 니 다.
[ key in (‘v0’, ‘v1’)]
IN 필터,문자열 과 수치 형식 을 지원 합 니 다.예 를 들 어$.departs[name in('wenshao','Yako')],$.departs[id not in(101,102)]
[ key between 234 and 456]
BETWEEN 필터,수치 형식 지원,not between 지원.예 를 들 어$.departs[id between 101 and 201],$.departs[id not between 101 and 201]
length()또는 size()
배열 길이.예 를 들 어$.values.size()지원 형식 자바 util.Map 과 자바 util.collection 과 배열
[‘key’]
속성 접근.예 를 들 어$[name]
[‘key0’,’key1’]
여러 속성 접근.예 를 들 어$['id','name']
코드 예시
예제 대상:
package json.fastjson.jsonpath;
public class Entity {
private Integer id;
private String name;
private Object value;
public Entity(Integer id, String name, Object value) {
super();
this.id = id;
this.name = name;
this.value = value;
}
public Integer getId() {
return id;
}
public Object getValue() {
return value;
}
public String getName() {
return name;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setValue(Object value) {
this.value = value;
}
@Override
public String toString() {
return "Entity [id=" + id + ", name=" + name + ", value=" + value + "]";
}
}
테스트 클래스:
package json.fastjson.jsonpath;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSONPath;
@SuppressWarnings("rawtypes")
public class TestJSONPath {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List entities = new ArrayList();
Entity entity1 = new Entity(1, " 1", "CSDN1");
Entity entity2 = new Entity(2, " 2", "CSDN2");
Entity entity3 = new Entity(3, " 3", "CSDN3");
entities.add(entity1);
entities.add(entity2);
entities.add(entity3);
System.out.println("
------ ---------------------------------------------------------");
System.out.println("JSONPath.eval(entity, \"$.value\") = " + JSONPath.eval(entity1, "$.value"));
System.out.println("JSONPath.contains(entity, \"$.value\") = " + JSONPath.contains(entity1, "$.value"));
System.out.println("JSONPath.containsValue(entity, \"$.id\", 123) = " + JSONPath.containsValue(entity1, "$.id", 123));
System.out.println("JSONPath.containsValue(entity, \"$.value\", entity.getValue()) = " + JSONPath.containsValue(entity1, "$.value", entity1.getValue()));
System.out.println("JSONPath.size(entity, \"$\") = " + JSONPath.size(entity1, "$"));
System.out.println("JSONPath.size(new Object[], \"$\") = " + JSONPath.size(new Object[5], "$"));
System.out.println("
------ :JSONPath.eval(entities, \"$.name\")-------------");
List names = (List) JSONPath.eval(entities, "$.name"); // enties
System.out.println("$.name = " + names);
System.out.println("
------ :JSONPath.eval(entities, \"[1,2]\")--------------------");
List result = (List) JSONPath.eval(entities, "[1,2]"); // 1 2
System.out.println("[1,2] = " + result);
System.out.println("
------ :JSONPath.eval(entities, \"[0:2]\")-------------------");
result = (List) JSONPath.eval(entities, "[0:2]"); // 0 2
System.out.println("[0:2] = " + result);
System.out.println("
------ , :JSONPath.eval(entities, \"[id in (1)]\")-------");
result = (List) JSONPath.eval(entities, "[id in (1)]");
System.out.println("[id in (1)] = " + result);
System.out.println("
------ --------------------------------------------");
System.out.println("[id = 1] = " + JSONPath.eval(entity1, "[id = 1]"));
System.out.println("[id = 1002] = " + JSONPath.eval(entity1, "[id = 1002]"));
System.out.println("
------ :JSONPath.set(entity1, \"id\", 123456);// id 123456-----");
JSONPath.set(entity1, "id", 123456); // id 123456
System.out.println("entity1.getId().intValue()=" + entity1.getId().intValue());
System.out.println("
------ -----------------------------------------------------");
JSONPath.set(entity1, "value", new ArrayList()); // value 0
System.out.println("entity1=" + entity1);
JSONPath.arrayAdd(entity1, "value", 1, 2, 3); // value 1,2,3
System.out.println("entity1=" + entity1);
System.out.println("
------ :JSONPath.eval(root, \"$..id\")-----------------------------");
Map root = Collections.singletonMap("company", //
Collections.singletonMap("departs", //
Arrays.asList( //
Collections.singletonMap("id", 1001), //
Collections.singletonMap("id", 1002), //
Collections.singletonMap("id", 1003) //
) //
));
List
출력 결과:
------ ---------------------------------------------------------
JSONPath.eval(entity, "$.value") = CSDN1
JSONPath.contains(entity, "$.value") = true
JSONPath.containsValue(entity, "$.id", 123) = false
JSONPath.containsValue(entity, "$.value", entity.getValue()) = true
JSONPath.size(entity, "$") = 3
JSONPath.size(new Object[], "$") = 5
------ :JSONPath.eval(entities, "$.name")-------------
$.name = [" 1"," 2"," 3"]
------ :JSONPath.eval(entities, "[1,2]")--------------------
[1,2] = [Entity [id=2, name= 2, value=CSDN2], Entity [id=3, name= 3, value=CSDN3]]
------ :JSONPath.eval(entities, "[0:2]")-------------------
[0:2] = [Entity [id=1, name= 1, value=CSDN1], Entity [id=2, name= 2, value=CSDN2], Entity [id=3, name= 3, value=CSDN3]]
------ , :JSONPath.eval(entities, "[id in (1)]")-------
[id in (1)] = [{"id":1,"name":" 1","value":"CSDN1"}]
------ --------------------------------------------
[id = 1] = Entity [id=1, name= 1, value=CSDN1]
[id = 1002] = null
------ :JSONPath.set(entity1, "id", 123456);// id 123456-----
entity1.getId().intValue()=123456
------ -----------------------------------------------------
entity1=Entity [id=123456, name= 1, value=[]]
entity1=Entity [id=123456, name= 1, value=[1, 2, 3]]
------ :JSONPath.eval(root, "$..id")-----------------------------
$..id = [1001, 1002, 1003]