2011-10-25 15 views
5

Ben Flexjson kullanarak JSON içine böyle bir sınıf seri ediyorum: Öğe alanlarıFlexjson kullanırken boş değer alanlarını nasıl hariç tutabilirsiniz?

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

    // Getters and setters 
    ... 
} 

Birçok boş olabilir (örneğin, açıklama). daha etkin bir şekilde daha

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

önceden de belirtildiği gibi, bir madde nesne çok boş değer alanlarını ihtiva edebilmektedir, bu yana, outcoming JSON olup: bu tür bir madde nesne Flexjson kullanılarak seri hale Neticede, Aşağıdakilerin JSON elde gerekli. Bu şu ana kadar bir sorundur, çünkü oluşturulan JSON'u bir web sunucusundan WiFi, 3G, EDGE veya GPRS üzerinden bir kablosuz bağlantı üzerinden bir mobil istemciye göndermek istiyorum (yani daha az bant genişliği gerektirir, bu da daha az hız ile sonuçlanır)).

Bu nedenle, Flexjson kullanarak boş değer özniteliklerinin nasıl (etkin bir şekilde) hariç tutulmasının mümkün olduğunu sormak istedim.

Teşekkürler!

cevap

16

Aşağıdaki trafosu kullanabilirsiniz. Satır 95:

JSONContext.java:

(Sınıf ile vs) Path tarafından Transformer ekleme boş değerler için FlexJSON güçleri TypeTransformer olarak desteklenmez

0

Ben tam durumunuzu denemedim ama şu sorunu çözmek gerektiğine inanıyoruz:

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

Açıkçası, muhtemelen bir alıcı kullanarak açıklama alanını erişmek istiyorum. Ayrıca, null alanlarını hariç tutmak için yansıma kullanarak örnek alanlarınızı yinelemek isteyebilirsiniz. Aşağıdaki kullanımı ile

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; 
    } 
} 

: Tüm boş alanlar hariç tutulacağını

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

Not

+0

Evet, bu tek çözüm geliyor bana bütün boş değerlere kaldırmak için normal ifadeyi kullandı. Teşekkürler – Matthias

+0

Sorun yok. :) – conciliator

1

deneyimsizim i vardı aynı sorun ve kaynak demirhaneye üzerinde herhangi bir çözüm bulamadı yüzden JSON string

/** 
* 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(); 
} 
İlgili konular