转换地图 到JSON并返回Map

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转换地图 到JSON并返回Map相关的知识,希望对你有一定的参考价值。

我有一个需要在JSON中序列化和反序列化的Map<String,Object>。因为它需要存储在db中,有时我不能使用byte[]。我熟悉Gson。但问题是当Map有没有反序列化的POJO回到它们各自的形式时。

考虑下面的地图

Map<String,Object> data = new HashMap<>();

Car car = new Car(1);
car.setHeight(2);
car.setWeight(3);
data.put("car",car);

Bike bike = new Bike(4);
bike.setType("Sports");
bike.setColour("Red");
data.put("bike",bike);

List<Truck> trucks = new LinkedList<>();
trucks.add(new Truck(5));
trucks.add(new Truck(6));
data.put("trucks",trucks);

现在将此地图转换为JSON会产生类似这样的结果

{
    "car":{
        "id":1,
        "height":2,
        "weight":3
    },
    "bike":{
        "id":4,
        "type":"Sports",
        "color":"Red"
    },
    "trucks":[
        {
            "id":5
        },{
            "id":6
        }
    ]
}

当转换回POJO时,它会产生LinkedHashMap而不是它们各自的POJO

我该如何解决这个问题。

答案

这是不可能的,因为你采取Map<String, Object>和转换器不知道ObjectMap的类型,所以很明显,它将返回LinkedHashMap。你可以做的是宁愿采取Map创建代表你的JSON的专用类。

public class Holder{
    private Car car;
    private Bike bike;
    private List<Truck> trucks;
    //getter-setter
}

以上是关于转换地图 到JSON并返回Map的主要内容,如果未能解决你的问题,请参考以下文章

如何将活动 UI 的点击传递到地图片段以将地图更改为 MAP_TYPE_HYBRID

使用片段的谷歌地图

如何使用带有 json 的 Map 从数据库中设置地图 latlng 值?

jquery .map() 返回地图内的对象

delphi 调用百度地图WEBSERVICE转换GPS坐标 转

返回在 map.forEach 中定义的值