Gson:java.util.Map转换所有键值对

时间:2015-06-11 17:36:04

标签: java json gson

我有以下代码:

Collection<Product> products = productRepository.findProducts(from, pageSize);

    Map<Product, BigDecimal> map = new TreeMap<>(new ProductComparator());
    for (Product product : products) {
        BigDecimal buyPrice = warehouseView.find(product.getId()).getBuyPrice();
        map.put(product, buyPrice);
    }

    Gson gson = new Gson();
    String json = gson.toJson(map);
    TypeToken mapType = new TypeToken<Map<Product, BigDecimal>>(){}.getType();
    String json2 = gson.toJson(map, mapType);
    JsonElement json3 = gson.toJsonTree(map, mapType);

说明 :我从DB返回了5个产品,然后对于每个产品,我都会调用DB获取购买价格。 DB可能返回0 - 表示仓库中没有给定的产品。

所以我想要实现 :获取json对象,它拥有全部5个产品。

现在是什么 :例如,对于3个产品,DB返回0 - 我只会将2个产品转换为json。

我尝试过不同版本的转换,例如jsonjson2json3 - 但这些都没有。

那么如何使用0值转换完整的Map对象?

2 个答案:

答案 0 :(得分:1)

您确定没有从服务中获得空值和/或您确定某些条目的产品不为空吗?

    Map<String, BigDecimal> test = new TreeMap<>();
    test.put("Test", BigDecimal.ZERO);
    test.put("Test2", BigDecimal.ONE);
    test.put("Test3", null);

    Gson gson = new Gson();

    Type mapType = new TypeToken<HashMap<String, Integer>>() {}.getType();
    System.out.println(gson.toJson(test, mapType));

    Gson gson2 = new GsonBuilder().serializeNulls().create();
    System.out.println(gson2.toJson(test, mapType));

打印

{"Test":0,"Test2":1}
{"Test":0,"Test2":1,"Test3":null}

答案 1 :(得分:0)

您也可以尝试以下操作;

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

Map<String, Object> MapObj = new HashMap<String, Object>();
MapObj.put("windowHandle", "current");
MapObj.put("id", "{a67fc38c-10e6-4c5e-87dc-dd45134db570}");
mapdataList.add(MapObj);

Gson gson = new Gson();
JsonObject jObject = new JsonObject();
JsonParser jP = new JsonParser();
jObject.add("data", jP.parse(gson.toJson(mapdataList)));
System.out.println(jObject.toString());