使用 Map 对 Java 对象进行杰克逊序列化?

Jas*_*hen 5 java json jackson

我有一个这样的 Java 类,想使用 Jackson 转换为 JSON。谢谢你的帮助。

  1. Java类

    public class myClass {
       String Id;
       Map<String, Object> optionalData = new LinkedHashMap<String, Object>();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如何使用 Jackson ObjectMapper 将其序列化为 JSON?

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

  [ 
    { 
      id: "book-id1",
      type: "book",
      year: "2014"
    },
    { 
      id: "book-id2",
      type: "book",
      year: "2013"
     }
  ]
Run Code Online (Sandbox Code Playgroud)

Bra*_*raj 0

Jackson JsonSerializer您需要根据需要编写自己的Java 对象来创建自定义 JSON 字符串。

这是很好的帖子和示例


您可以使用以下方法实现同样的效果GSON JsonSerializer

这里有些例子


这是使用的代码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);
Run Code Online (Sandbox Code Playgroud)

输出:

[
    {
        "id": "book-id1",
        "type": "book",
        "year": "2014"
    },
    {
        "id": "book-id2",
        "type": "book",
        "year": "2013"
    }
]
Run Code Online (Sandbox Code Playgroud)