FastJson-JSONField
9765 단어 fastjson
Maven 의존 창고 주소http://repo1.maven.org/maven2/com/alibaba/fastjson/ 버 전 선택, 최신 버 전 사용 권장
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.37</version>
</dependency>
가장 많이 사용 되 는 도구 류 와 두 가지 방법
JSON json , Javabean,Map,List,
JSON.toJSONString(Object object)
JSON.toJSONString(Object object, boolean prettyFormat), ,
예컨대
@Test
public void testJSonBean() throws Exception {
Model m = new Model(); // Java VO
m.setName("xiele");
m.setDate(new Date());
m.setIg(1);
m.setLg(1000L);
System.out.println(JSON.toJSONString(m));
}
:
{"name":"xiele","date":1437487740477,"lg":1000,"ig":1}
prettyFormat true
JSON.toJSONString(m,true)
{
"name":"xiele",
"date":1437487867654,
"lg":1000,
"ig":1
}
보조 직렬 화 기능 설정 (SerialFeature)
public static final String toJSONString(Object object, SerializerFeature... features)
public enum SerializerFeature {
QuoteFieldNames, // ,
UseSingleQuotes, //
WriteMapNullValue, // , null
WriteEnumUsingToString,Enum
UseISO8601DateFormat, //Date ISO8601
WriteNullListAsEmpty,//list null, [], null, null
WriteNullStringAsEmpty,// null, ""( )
WriteNullNumberAsZero, // null, 0, null
WriteNullBooleanAsFalse, //Boolean null, false, null
SkipTransientField, // @Transient
SortField //
}
사용법
JSON.toJSONString(m,SerializerFeature.UseISO8601DateFormat)
맞 춤 형 직렬 화 는 게 이 트 웨 이 개발 을 할 때 모 바 일 에 제공 하 는 많은 데 이 터 를 간소화 해 야 합 니 다. 예 를 들 어 VO 의 key 는 맞 춤 형 출력 이 필요 하고 FastJSon 이 제공 하 는 @ JSONfield 주 해 를 사용 할 수 있 습 니 다. @JSONfield 는 두 가지 방식 이 있 습 니 다. 1. 필드 에서 2. 속성 getter 방법 에서 예 를 들 어
public class VO {
@JSONField(name="ID")
private int id;
}
public class VO {
private int id;
@JSONField(name="ID")
public int getId() { return id;}
}
그러나 패스 트 제 이 슨 의 @ JSONfield 를 사용 해 맞 춤 형 제작 을 할 때 는 가끔 효력 이 발생 하지 않 고 계승 하 는 경우 도 포 함 돼 결과 가 일치 하지 않 을 때 도 있다.공식 적 으로 는 버 전이 너무 낮 아 fastjson - 1.1.42 로 업그레이드 하면 된다 는 설명 이다.https://github.com/alibaba/fastjson/issues/176
수 요 는 변화 합 니 다. 가끔 은 맞 춤 형 이 필요 하고 어떤 단말 기 는 맞 춤 형 이 필요 하지만 발 표 된 VO 를 재 활용 해 야 하지만 @ JSONfield 맞 춤 형 으로 인 한 어려움 을 해소 해 야 합 니 다.해결 방법 은 반 사 를 통 해 VO 의 필드 Field 를 찾 은 다음 주 해 를 얻 고 주해 의 값 을 얻 은 다음 맵 에 저장 하여 맞 춤 형 이름과 원래 필드 이름 을 Key - Value 로 연결 하 는 것 입 니 다.FastJSon 이 제공 하 는 NameFilter 이름 필 터 를 통 해 시퀀스 의 이름 을 걸 러 냅 니 다.
주석 값 가 져 오기
@Test
public void testGetFieldAnno() throws Exception {
Map<String, String> map = Maps.newHashMap();
Model m = new Model();
Field[] fs = m.getClass().getDeclaredFields();
for (Field f : fs) {
if (f.isAnnotationPresent(JSONField.class)) {
JSONField jf = f.getAnnotation(JSONField.class);
map.put(jf.name(), f.getName());
}
}
System.out.println(JSON.toJSONString(map,true));
}
필터 이름
@Test
public void testMapJSonField() {
Model m = new Model();
m.setName("xiele");
m.setDate(new Date());
m.setIg(1);
m.setLg(1000L);
final Map<String, String> map = Maps.newHashMap();
Field[] fs = m.getClass().getDeclaredFields();
for (Field f : fs) {
if (f.isAnnotationPresent(JSONField.class)) {
JSONField jf = f.getAnnotation(JSONField.class);
map.put(jf.name(), f.getName());
}
}
System.out.println(JSON.toJSONString(map,true));
NameFilter filter = new NameFilter() {
@Override
public String process(Object source, String name, Object value) {
// source , name key, value
return map.get(name);
}
};
JSONSerializer jsonSerializer = new JSONSerializer();
jsonSerializer.getNameFilters().add(filter); // , name
jsonSerializer.write(m);
System.out.println(jsonSerializer.toString());
}
이외에 도 FastJSon 은 속성 필터 PropertyFilter, 값 필터 ValueFilter 를 제공 해 유사 한 사용법 을 사용 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
fastjson의 @JSONField 주석에 대한 질문(상해)원본을 보면 필드와 방법에 작용할 수 있습니다. 인터넷에서 말한 것을 인용하여 그러나 나는 사용 중에 위에서 말한 바와 같지 않다는 것을 발견했다. bean이 json을 돌리는 것을 발견했을 때는'project_id...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.