FastJson-JSONField

9765 단어 fastjson
요약https://github.com/alibaba/fastjson http://blog.csdn.net/zimo2013/article/details/10474107
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 를 제공 해 유사 한 사용법 을 사용 했다.

좋은 웹페이지 즐겨찾기