【问题标题】:How to serialize Map<String, List<Object>> with FlexJSON如何使用 FlexJSON 序列化 Map<String, List<Object>>
【发布时间】:2012-09-16 23:00:43
【问题描述】:

我有一个要序列化为 JSON 的对象。该对象是一个包含特定对象列表的地图。这看起来和它很相似:

Map<String, List<Object>> map = new Map<String, List<Object>>();

我正在使用 FlexJSON。我只能使用flexjson.JSONSerializer。有我的尝试:

JSONSerializer jsonSerializer = new JSONSerializer();
//        jsonSerializer.include("map");
//        jsonSerializer.include("map.myList.object");
jsonSerializer.transform(new MapTransformer(), "map");
jsonSerializer.exclude("*.class");

如您所见,我现在正在尝试使用 Transformer 课程,但我没有成功。我想,如果我的List&lt;Object&gt; 有自己的名称,例如myList,注释行将起作用。但它没有自己的名字,因为它是我地图的values

如何使用 FlexJSON 将此类对象序列化为 JSON?

【问题讨论】:

    标签: java json jsonserializer flexjson


    【解决方案1】:

    Quoi 是正确的,并且很可能是您想要使用的答案。但是,为了了解更多关于它的工作原理,您可以这样做:

    new JSONSerializer().include("values.values").serialize( myMap );
    

    地图和列表是容器,对其中包含的元素有特殊的表达方式。当您想谈论容器的值的路径时,您可以在路径中使用“值”表达式。 Map 的两个特殊表达式“键”和“值”。其他集合有“价值”。

    另一种选择是像这样使用通配符:

       new JSONSerializer().include("values.*").serialize( myMap );
    

    您还可以看到 Quoi 的答案中使用的通配符来排除类属性。

    【讨论】:

    • 通配符是我的最佳选择。正如我所提到的,我只能对flexjson.JSONSerializer 对象进行操作。
    • 我为Map&lt;String,Object&gt;尝试了这个,有和没有include("values"),但是json结果是一样的;使用"values"时,我希望在地图中看到不同Object类型的json中的类类型数据?
    【解决方案2】:

    试试

    String jsonString = new JSONSerializer().exclude("*.class").deepSerialize(map);
    

    deepSerialize 方法执行目标实例的深度序列化。默认情况下,它将包含所有集合、映射和数组,因此忽略包含,除非您想包含被注释排除的内容。

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多