2011-10-25 4 views
5

나는 Flexjson를 사용하여 JSON으로이 같은 클래스를 직렬화하고 : 항목 필드의Flexjson을 사용할 때 null 값 필드를 제외하는 방법은 무엇입니까?

public class Item { 
    private Long id; 
    private String name; 
    private String description; 
    ... 

    // Getters and setters 
    ... 
} 

많은 사람들이 널 (null) 일 수있다 (예를 들어, 설명). 더 효과적으로보다

{"id":62,"name":"Item A","description":null,...} 

이미 언급 한 바와 같이, 아이템 객체가 많은 널 (null) 값 필드를 포함 할 수 있기 때문에, outcoming는 JSON은 다음과 같은 항목 객체가 Flexjson을 사용하여 직렬화 할 때 따라서, 나는 다음과 같은 JSON을 얻을 필요합니다. 이것은 Wi-Fi, 3G, EDGE 또는 GPRS를 통해 무선 연결을 통해 웹 서버에서 모바일 클라이언트로 생성 된 JSON을 보내려고하기 때문에 문제가 있습니다 (즉, 더 많은 대역폭이 필요하므로 속도가 떨어집니다).).

따라서 Flexjson을 사용하여 null 값 속성을 (효율적으로) 제외 할 수있는 방법을 묻고 싶습니다.

감사합니다.

답변

16

는 다음과 같은 변압기를 사용할 수 있습니다. 라인 95 :

JSONContext.java :

(클래스 대) 경로로 변압기를 추가 null 값에 대한 FlexJSON 강제 TypeTransformer로 지원되지 않습니다

0

나는 정확히 상황을 시도하지 않은,하지만 난 다음이 문제를 해결한다고 생각 :

Item item; 
// Assign item here 
JSONSerializer json = new JSONSerializer(); 
if (item.description != null) { 
    json.exclude(field); 
} 
return json.serialize(item); 

분명히, 당신은 아마 게터를 사용하여 설명 필드에 액세스하는 것입니다. 또한 리플렉션을 사용하여 인스턴스 필드를 반복하여 null 필드를 제외시킬 수 있습니다. 다음 사용에

import flexjson.transformer.AbstractTransformer; 

public class ExcludeTransformer extends AbstractTransformer { 

    @Override 
    public Boolean isInline() { 
     return true; 
    } 

    @Override 
    public void transform(Object object) { 
     // Do nothing, null objects are not serialized. 
     return; 
    } 
} 

: 모든 널 (null) 필드는 제외됩니다

new JSONSerializer().transform(new ExcludeTransformer(), void.class).serialize(yourObject) 

+0

그래,이 유일한 해결책이 날 것으로 보인다 모든 널 (null)을 제거하는 정규 표현식을 사용했다. 감사합니다 – Matthias

+0

아무 문제 없습니다. :) – conciliator

1

내가 초보자 오전, 내가했다 같은 문제 및 소스 포지에 어떤 해결책을 찾을 수 없습니다 그래서 내가 JSON 문자열에서

/** 
* This Function removes all the key:value pairs from the Json String for which the value equals null 
* @param jsonStringWithNullKeys 
* @return jsonStringWithoutNullKeys 
*/ 
public static String getJsonStringWithoutNullKeys(String jsonStringWithNullKeys) 
{ 
    Pattern p = Pattern.compile("([,]?\"[^\"]*\":null[,]?)+"); 
    Matcher m = p.matcher(jsonStringWithNullKeys); 
    StringBuffer newString = new StringBuffer(jsonStringWithNullKeys.length()); 

    while(m.find()) 
    { 
     if(m.group().startsWith(",") & m.group().endsWith(",")) m.appendReplacement(newString, ","); 
     else 
      m.appendReplacement(newString, ""); 
    } 
    m.appendTail(newString); 
    return newString.toString(); 
}