2017-02-08 113 views
1

我有一個小函數,它接受一個輸入JSON字符串,使用boon解析爲Map,替換特定鍵的值,返回修改的Map的JSON字符串。Java Boon JSON解析器從輸出中刪除空值

的代碼如下:

// 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

如何在不丟失空字段的情況下解析此問題?

回答

2

使用toJson,您正在使用默認的serialiser工廠。從實惠的源代碼:

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(); 
+0

感謝的,它的作品!但我必須對您的建議做一個修改: 'JsonSerializer factory = new JsonSerializerFactory()。includeNulls()。create();'。注意'JsonSerializer'類實例化,而不是'JsonSerializerFactory'。 – tamjd1

+0

謝謝@ tamjd1。我已更新我的答案,以避免用戶錯誤。請接受我的回答,如果它有幫助,請。 – alfcope