Gson: java.util.Map 转换所有键值对
Gson: java.util.Map convert all key-value pairs
我有以下代码:
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 个产品 return 来自 DB,然后对于每个产品我调用 DB得到买入价。 DB 可能 return 0 - 表示给定产品不在仓库中。
所以我想要实现的:得到json对象,它有所有5个产品。
现在是什么:如果例如对于 3 个产品数据库 return 0 - 我将只得到我的 2 个产品转换为 json.
我尝试过不同版本的转换,例如json
、json2
、json3
- 但其中 none 有效。
那么如何转换具有 0
个值的完整 Map 对象?
您确定不会从您的服务中返回 null and/or 您确定某些条目的 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}
您也可以试试下面的方法;
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());
我有以下代码:
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 个产品 return 来自 DB,然后对于每个产品我调用 DB得到买入价。 DB 可能 return 0 - 表示给定产品不在仓库中。
所以我想要实现的:得到json对象,它有所有5个产品。
现在是什么:如果例如对于 3 个产品数据库 return 0 - 我将只得到我的 2 个产品转换为 json.
我尝试过不同版本的转换,例如json
、json2
、json3
- 但其中 none 有效。
那么如何转换具有 0
个值的完整 Map 对象?
您确定不会从您的服务中返回 null and/or 您确定某些条目的 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}
您也可以试试下面的方法;
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());