Java boon JSON 解析器从输出中删除空值

标签 java json serialization boon

我有一个小函数,它接受输入 JSON 字符串,使用 boon 将其解析为 Map,替换特定键的值,返回 JSON 字符串修改后的 map

代码如下:

// inputJson = {"key3":"A","key2":"B","key1":null,"keyX":[{"x":2019,"y":123,"z":456},{"x":2017,"y":234,"z":345},{"x":2018,"y":456,"z":567}]}

private static String sorter(String inputJson) {
    JsonParserAndMapper mapper = new JsonParserFactory().strict().create();

    Map<String, Object> map = mapper.parseMap(inputJson);

    List<?> l1 = (List<?>) map.get("keyX");

    sort(l1, Sort.sortBy("x"));

    map.replace("keyX", l1);

    for (String x: map.keySet())
        System.out.println(map.get(x));

    String outputJson = toJson(map);  // problem seems to be here

    return outputJson

// outputJson = {"key2":"B","key3":"A","keyX":[{"x":2017,"y":234,"z":345},{"x":2018,"y":456,"z":567},{"x":2019,"y":123,"z":456}]}

问题是,当我执行 toJson(map) 时,它会删除具有 null 值的键。因此,如果 inputJson 包含具有空值的键,它不会出现在输出中。 (注意:输出中缺少 key1)

如何在不丢失空字段的情况下解析它?

最佳答案

使用 toJson 您正在使用默认的序列化器工厂。来自 boon 源代码:

public class JsonFactory {


    private static ObjectMapper json = JsonFactory.create();

    public static ObjectMapper create () {
        JsonParserFactory jsonParserFactory = new JsonParserFactory();
        jsonParserFactory.lax();

        return new ObjectMapperImpl(jsonParserFactory,  new JsonSerializerFactory());
    }
....
)

不要使用 toJson,而是尝试使用带有 includeNulls() 的序列化器工厂

JsonSerializer factory = new JsonSerializerFactory().includeNulls().create();

关于Java boon JSON 解析器从输出中删除空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42125603/

相关文章:

java - 确定单元测试的内容和不测试的内容

java - 关闭套接字和 ObjectOutputStream 的正确方法?

Java序列化用法

java - 使用 JFree Chart API 生成饼图部分标签的 URL

java - 如何使用AndroidAsyncHttp发送json格式的数据

java - jOOQ:DataAccessException 和约束

java - 带有子对象的 pojo 的 JSON 序列化

python - 如何在 Python 中正确转义 json 字符串中的双引号 (")

javascript - 如何从提到的字符串中获取逗号分隔的值

javascript - 从数组 JSON 输入返回所有字段的 JSON 路径?