如何有效地将JAVA对象转换为JSON ..?

Ram*_*ngh 2 java json transformer-model mule

我正在使用骡子.我有一个JAVA对象,从我的内部类填充..它实际上是一个HashMap<String,Object>.Object可以是任何东西..另一个HashMap,或其他List..现在我必须将其转换为JSON(并删除所有那些值为NULL的键)..

当我使用给定的Mule Transformer时ObjectToJSON,它正在转换为适当的JSON ..但是无法删除NULL值.并且我找不到要在Custom-transformer中设置的任何属性,这将删除NULL值.. !!


那么,我写了一个自定义变换器,使用该net.sf.json-lib库,我能够删除NULL值.

但是在我的一个JAVA对象中,我有一个HashMap<Integer,String>,因为在JSON对象中,Integer不能是键,net.sf.json库给出了一个例外:

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)
Run Code Online (Sandbox Code Playgroud)

所以它无法将其转换为JSON ..


那么什么是最可行的选择.. ??

avi*_*iad 8

我建议你尝试gson它对我来说就像魔术一样.

集合示例

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

(串行化)

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

(反序列化)

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

ints2与整数相同

以下是如何为JodaTime DateTime类编写自定义序列化程序的示例.

private class DateTimeSerializer implements JsonSerializer<DateTime> {
  public JsonElement serialize(DateTime src, Type typeOfSrc, JsonSerializationContext  context) {
    return new JsonPrimitive(src.toString());
  }
}
Run Code Online (Sandbox Code Playgroud)