当前位置: 首页 > 知识库问答 >
问题:

Genson 能否处理对象上的通用嵌套字段?

锺离穆冉
2023-03-14

基本上,我有一些Java的对象,我想尽可能不头疼地序列化为JSON。现在我正在使用Tomcat、泽西和Genson。

我发现类似这样的东西在Genson上不起作用(当然,这是一个玩具示例):

public class Main {
    public static void main(String[] args) {
        MyClass mc = new MyClass();
        mc.mapOfSets = new HashMap<>();
        Set<String> set0 = new HashSet<>();
        set0.add("0");
        Set<String> set1 = new HashSet<>();
        set1.add("1");
        set1.add("11");
        Set<String> set2 = new HashSet<>();
        set2.add("2");
        set2.add("22");
        set2.add("222");
        mc.mapOfSets.put("set0", set0);
        mc.mapOfSets.put("set1", set1);
        mc.mapOfSets.put("set2", set2);
        try {
            String json1 = new Genson().serialize(mc.mapOfSets);
            System.out.println(json1);
            String json = new Genson().serialize(mc);
            System.out.println(json);
        } catch (TransformationException | IOException e) {
            e.printStackTrace();
        }
    }
}

class MyClass {
    public Map<String, Set<String>> mapOfSets;
}

上面的输出是:

{"set1":["1","11"],"set0":["0"],"set2":["2","222","22"]}
{"mapOfSets":{"empty":false}}

Genson的好处在于,我只需将它放在我的WebContent文件夹中,就可以使用它来代替Jersey附带的任何东西——不需要额外的配置。如果有一种非常直接的方法可以将上面这样的对象序列化为JSON,而不必为每个模式编写某种转换器,我会很乐意使用Jersey而不是Genson,但是Genson到目前为止还没有让我失望。

那么-我如何按摩Genson以正确序列化-或者什么是无痛处理此类事情的库?

谢谢

共有2个答案

范兴文
2023-03-14

我正在使用Guice来处理我的依赖注入需求,这就是为什么我很难将杰克逊与我的泽西项目集成在一起。由于Genson没有做我想要的事情,我决定再次尝试杰克逊。我尝试改变了一些事情,直到它成功,尝试了SO和Google上的不同建议。

现在,下面给出了我的沙盒项目中预期的输出:

ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
String jsonData = mapper.writeValueAsString(mc);
System.out.println(jsonData);
{"mapOfSets":{"set1":["1","11"],"set0":["0"],"set2":["2","222","22"]}}
匡凌
2023-03-14

我是Gensons的作者。我刚刚检查过,这是一个bug,泛型在Genson中可以正常工作,除了这个特殊情况……如果你能等到明天,我今晚将推出一个新版本,包含修复程序和一些小的新功能。完成后,我会更新我的答案。

编辑错误更正并将0.94版推送到公共maven repo,它应该最多在几个小时内可用。以下是此版本中的一些更改。请尝试并确认它是否解决了您的问题。谢谢:)

 类似资料:
  • 我用的是angular 5。我尝试在下面的html数组中使用嵌套循环 对象: HTML: 我得到以下解析错误: 我在app.module.ts导入了BrowserModul和Common Modul,这样用户就可以将一周中的任何一天的时间表复制到一周的其余时间。 编辑:我的代码中的实际超文本标记语言:

  • 问题内容: 这是我的文档架构。是嵌套对象。我需要更新/删除其中的特定文件。我能够使用groovy脚本更新字段。 但是不知道如何更新嵌套对象。 例如,我想将此添加到中。 并且我的文档应更改为: 如果我基于= 122 执行删除,则我的记录应如下所示 问题答案: 要将新元素添加到嵌套字段,您可以像这样进行操作: 要从嵌套字段列表中删除现有元素,可以按以下步骤进行:

  • 我有一个带有嵌套字段的JSON: 我正在使用JSONPATH从嵌套中获取。 我已经将我的JSON文本粘贴到了http://jsonpath.com/这个网站上;并且在使用了这一行之后: 我得到了这个: 使用此行后: 我得到了这个: 我尝试返回(输出)的内容如下: 但是我找不到合适的语法来将这两个组合在一行中,并用一个JSONPATH查询返回它们。

  • 我是MongoDB的新手,我正在用Mongoose创建一个简单的数据库,模型如下:用户、游戏和玩家。 因此,一个用户不包含或包含多个游戏。每个游戏都有一个玩家,每个玩家都指一个用户。如下所示(为了清晰起见,我简化了模式): 因此,现在在前端,我想向后端发送一份请愿书,为用户Joe(_id:11111)和Bob(_id:22222)创建一个新游戏,因此我向/api/games发送了一篇帖子,帖子的主

  • 问题内容: 这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。 索引的映射是 我的查询是 但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询 问题答案: 试试这个:

  • 我有一个包含对象和数组的嵌套数据结构。如何提取信息,即访问特定或多个值(或键)? 例如: 如何访问中第二个项目的?