如何使用 FlexJSON 序列化 Map<String, List<Object>>
Posted
技术标签:
【中文标题】如何使用 FlexJSON 序列化 Map<String, List<Object>>【英文标题】:How to serialize Map<String, List<Object>> with FlexJSON 【发布时间】: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<Object>
有自己的名称,例如myList
,注释行将起作用。但它没有自己的名字,因为它是我地图的values
。
如何使用 FlexJSON 将此类对象序列化为 JSON?
【问题讨论】:
【参考方案1】:Quoi 是正确的,并且很可能是您想要使用的答案。但是,为了了解更多关于它的工作原理,您可以这样做:
new JSONSerializer().include("values.values").serialize( myMap );
地图和列表是容器,对其中包含的元素有特殊的表达方式。当您想谈论容器的值的路径时,您可以在路径中使用“值”表达式。 Map 的两个特殊表达式“键”和“值”。其他集合有“价值”。
另一种选择是像这样使用通配符:
new JSONSerializer().include("values.*").serialize( myMap );
您还可以看到 Quoi 的答案中使用的通配符来排除类属性。
【讨论】:
通配符是我的最佳选择。正如我所提到的,我只能对flexjson.JSONSerializer
对象进行操作。
我为Map<String,Object>
尝试了这个,有和没有include("values")
,但是json结果是一样的;使用"values"
时,我希望在地图中看到不同Object
类型的json中的类类型数据?【参考方案2】:
试试
String jsonString = new JSONSerializer().exclude("*.class").deepSerialize(map);
deepSerialize 方法执行目标实例的深度序列化。默认情况下,它将包含所有集合、映射和数组,因此忽略包含,除非您想包含被注释排除的内容。
【讨论】:
以上是关于如何使用 FlexJSON 序列化 Map<String, List<Object>>的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 boost std::vector of boost::unordered_map 进行序列化/反序列化