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

标签 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);

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

所以我想要实现:获取 json 对象,其中包含所有 5 个产品。

现在是什么:例如,如果 3 个产品数据库返回 0 - 我只会将 2 个产品转换为 json。

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

那么如何转换具有 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/

相关文章:

java - 多对一关系的无限递归错误

java - Micronaut:如何映射 HashMap 中的所有属性值?

php - 使用 NotORM 在 mysql 中最后插入和更新的行

java - 与 Spring Data JPA 和泛型类型混淆

javascript - 为什么这些对象不相等?

java - 将 Intent 的 json 字符串转换为 Intent 的对象,给出异常

java - 如何使用类名动态设置 ArrayList 类型?

android - 使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 接受格式错误的 JSON

java - 如何在 Android 中以编程方式解压缩文件?

java - FileOutputStream() 不起作用?