带有Map的Java对象的jackson序列化?

我有一个像这样的
Java类,并希望使用Jackson转换为
JSON.谢谢你的帮助.

> Java类

public class myClass {
   String Id;
   Map<String, Object> optionalData = new LinkedHashMap<String, Object>();
}

>如何使用Jackson ObjectMapper将其序列化为JSON?

例如,假设optionalData是一个Map,保存两个条目<“type”,“book”>和<“年”,“2014”>
我希望输出如下.请注意,optionalData的键/值可以动态更改(因此,我不能为此创建“静态”Java对象而不使用Map)

  [ 
    { 
      id: "book-id1",
      type: "book",
      year: "2014"
    },
    { 
      id: "book-id2",
      type: "book",
      year: "2013"
     }
  ]

最佳答案 您需要编写自己的
Jackson JsonSerializer以根据需要从Java对象创建自定义JSON字符串.

以下是不错的帖子以及示例

> JSON Serializer & DeserializerHow do I use a custom Serializer with Jackson?
> How Do I Write a Jackson JSON Serializer & Deserializer?

使用GSON JsonSerializer可以实现同样的目的

这里有些例子

> Serialize java object with GSON
> GSON Serialiser Example – javacreed

以下是使用GSON Serialiser的代码

List<MyClass> list = new ArrayList<MyClass>();

MyClass myClass1 = new MyClass();
myClass1.setId("book-id1");
myClass1.getOptionalData().put("type", "book");
myClass1.getOptionalData().put("year", "2014");
list.add(myClass1);

MyClass myClass2 = new MyClass();
myClass2.setId("book-id2");
myClass2.getOptionalData().put("type", "book");
myClass2.getOptionalData().put("year", "2013");
list.add(myClass2);

class MyClassSerialiser implements JsonSerializer<MyClass> {

    @Override
    public JsonElement serialize(final MyClass obj, final Type typeOfSrc,
            final JsonSerializationContext context) {
        final JsonObject jsonObject = new JsonObject();

        jsonObject.addProperty("id", obj.getId());
        Map<String, String> optioanlData = obj.getOptionalData();
        if (optioanlData.size() > 0) {
            for (Map.Entry<String, String> entry : optioanlData.entrySet()) {
                jsonObject.addProperty(entry.getKey(), entry.getValue());
            }
        }

        return jsonObject;
    }
}

String jsonString = new GsonBuilder().setPrettyPrinting().
        .registerTypeAdapter(MyClass.class, new MyClassSerialiser()).create()
        .toJson(list);

System.out.println(jsonString);

输出:

[
    {
        "id": "book-id1",
        "type": "book",
        "year": "2014"
    },
    {
        "id": "book-id2",
        "type": "book",
        "year": "2013"
    }
]
点赞