我有以下代码:
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);
说明:我有 5 个从 DB 返回的产品,然后对于每个产品,我都会调用 DB 以获取购买价格。 DB 可能返回 0 - 这表示仓库中不存在给定的产品。
所以我想要实现:获取 json 对象,其中包含所有 5 个产品。
现在是什么:例如,如果 3 个产品数据库返回 0 - 我只会将 2 个产品转换为 json。
我尝试过不同版本的转换,例如json
、json2
、json3
- 但这些都不起作用。
那么如何转换具有 0
值的完整 Map 对象?
最佳答案
您确定您没有从服务中返回 null 和/或您确定某些条目的 Product 不为 null?
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}
关于java - Gson:java.util.Map转换所有键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30787663/