【问题标题】:Transform map into key value pairs with Genson使用 Genson 将 map 转换为键值对
【发布时间】:2018-03-16 21:18:13
【问题描述】:

我正在使用Genson 将 Java 类序列化为 JSON。其中一个类成员是 Map,我需要将其直接序列化为名称/值对。例如:

public class Demo {

    String name;
    Map<String, String> mp = new HashMap<>();

    ...
    name = "MyName";
    mp.put("Book", "My book title");
    mp.put("Fruit", "Orange");
    ...

}

我需要序列化:

{
    "name":"Myname",
    "Book": "My book title",
    "Fruit": "Orange"
}

我尝试应用Genson,我已经接近它的默认操作,输出是:

{
    "name":"Myname",
    "mp":{
        "Book": "My book title",
        "Fruit": "Orange"
    }
}

保证 mp 中的键不会与 Demo 的任何成员发生名称冲突。

如何使用 Genson 实现这个用例?

【问题讨论】:

    标签: java json serialization genson


    【解决方案1】:

    可以通过实现自定义Converter来实现此输出。

    例如:

    import com.owlike.genson.Context;
    import com.owlike.genson.Converter;
    import com.owlike.genson.stream.ObjectReader;
    import com.owlike.genson.stream.ObjectWriter;
    
    public class DemoConverter implements Converter<Demo> {
    
      @Override
      public void serialize(Demo demo, ObjectWriter objectWriter, Context context) {
        objectWriter.beginObject();
        objectWriter.writeString("name", demo.getName());
        demo.getMp().forEach((prop, value) ->
          objectWriter.writeString(prop, value)
        );
        objectWriter.endObject();
      }
    
      @Override
      public Demo deserialize(ObjectReader objectReader, Context context) throws Exception {
        // TODO
      }
    
    }
    

    现在,Genson 应该被实例化并与这个转换器一起使用:

    Genson genson = new GensonBuilder().withConverters(new DemoConverter()).create();
    String json = genson.serialize(demo);
    // and the JSON is
    {"name":"MyName","Fruit":"Orange","Book":"My book title"}
    

    More doc, in "Custom Converter" section.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 2015-12-20
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      相关资源
      最近更新 更多