3

ミュールを使用しています。内部クラスから生成された JAVA オブジェクトがあります。実際にはHashMap<String,Object>. Object何でもかまいません..another HashMap、ORListなど..今、私はそれをに変換する必要がJSONあります(そしてNULLとして値を持つすべてのキーを削除します)..

特定の Mule Transformer を使用すると、ObjectToJSON適切な JSON に変換されます..しかし、NULL 値を削除できません..そして、NULL 値を削除するCustom-transformerに設定するプロパティが見つかりませんでした..!!


そこで、ライブラリを使用するカスタム トランスフォーマーnet.sf.json-libを作成し、NULL 値を削除することができました。

しかし、私の JAVA Object の 1 つで、HashMap<Integer,String>JSON Object では Integer をキーにすることはできないため、net.sf.jsonライブラリは Exception を与えています:

Exception stack is:
1. JSON keys must be strings. (java.lang.ClassCastException)
  net.sf.json.JSONObject:1120 (null)
2. java.lang.ClassCastException: JSON keys must be strings. (net.sf.json.JSONException)
  net.sf.json.JSONObject:1160 (null)
3. java.lang.ClassCastException: JSON keys must be strings. (net.sf.json.JSONException). Message payload is of type: HashMap (org.mule.api.transformer.TransformerMessagingException)

そのため、JSONに変換できません..


それで、最も実行可能なオプションは何ですか..??

4

3 に答える 3

8

私にとっては魔法のように機能したgsonを試してみることをお勧めします。

コレクションの例

Gson gson = new Gson();
Collection<Integer> ints = Lists.immutableList(1,2,3,4,5);

(シリアル化)

String json = gson.toJson(ints); ==> json is [1,2,3,4,5]

(逆シリアル化)

Type collectionType = new TypeToken<Collection<Integer>>(){}.getType();
Collection<Integer> ints2 = gson.fromJson(json, collectionType);

ints2はintsと同じです

これは、JodaTimeDateTimeクラスのカスタムシリアライザーを作成する方法の例です。

private class DateTimeSerializer implements JsonSerializer<DateTime> {
  public JsonElement serialize(DateTime src, Type typeOfSrc, JsonSerializationContext  context) {
    return new JsonPrimitive(src.toString());
  }
}
于 2012-03-15T13:04:07.097 に答える
1

Gsonを見たことがありますか?

http://sites.google.com/site/gson/gson-user-guide#TOC-Null-Object-Support

于 2012-03-15T13:03:14.227 に答える
0

http://www.ietf.org/rfc/rfc4627.txtから

オブジェクト構造は、0 個以上の名前と値のペア (またはメンバー) を囲む中かっこのペアとして表されます。名前は文字列です。

最初の Java 構造を変更して String をキー タイプとして使用することをお勧めします。

ただし、Jackson ライブラリを使用すると、より洗練されたソリューションを作成できます。

  1. カスタム デシリアライザーを使用するJackson を使用した文字列以外のマップ キーのデシリアライズ

  2. 独自の Java POJO の代わりにツリー モデルを使用するhttp://wiki.fasterxml.com/JacksonInFiveMinutes

于 2014-02-10T17:23:47.673 に答える