首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Genson将映射转换为键值对

用Genson将映射转换为键值对
EN

Stack Overflow用户
提问于 2018-03-16 21:18:13
回答 1查看 95关注 0票数 0

我使用根森将一个Java类序列化为JSON。其中一个类成员是Map,我需要将它直接序列化为name/value对。例如:

代码语言:javascript
复制
public class Demo {

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

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

}

序列化我需要:

代码语言:javascript
复制
{
    "name":"Myname",
    "Book": "My book title",
    "Fruit": "Orange"
}

我尝试应用Genson,并且我正在接近它的默认操作,输出是:

代码语言:javascript
复制
{
    "name":"Myname",
    "mp":{
        "Book": "My book title",
        "Fruit": "Orange"
    }
}

mp中的密钥保证不会与Demo的任何成员命名冲突。

如何用Genson实现这个用例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-16 21:57:29

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

例如:

代码语言:javascript
复制
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并与此转换器一起使用:

代码语言:javascript
复制
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"}

更多文档,在“自定义转换器”部分

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49329670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档