gpt4 book ai didi

java - 使用 Genson 将映射转换为键值对

转载 作者:行者123 更新时间:2023-12-02 02:15:45 24 4
gpt4 key购买 nike

我正在使用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 中的 key 不会与 Demo 的任何成员发生名称冲突。

如何使用 Genson 实现此用例?

最佳答案

可以通过实现自定义转换器来实现此输出。

例如:

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 .

关于java - 使用 Genson 将映射转换为键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49329670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com