2011-10-25 11 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,...} 

Iはすでに述べたように、アイテムオブジェクトは、多くのNULL値フィールドを含んでいてもよい、あるので、前記結果は、JSONである:そのようなアイテムオブジェクトがFlexjsonを使用して直列化された場合、結果として、私は、次のJSONを取得します必要です。私はWiFi、3G、EDGE、またはGPRS経由でワイヤレス接続を介してWebサーバーからモバイルクライアントに生成されたJSONを送信したいので、これはこれまでの問題です(つまり、帯域幅が必要です。 )。

したがって、Flexjsonを使用してヌル値属性を(効率的に)除外することは可能ですか?

ありがとうございます!

答えて

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

を削除するには、正規表現を使用ええ、これが唯一の解決策であるように私には思えます。ありがとう – 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(); 
} 
関連する問題