JSON出力フィールド空の文字列がnullの場合

地図<文字列、オブジェクト> jsonMap = 新しい HashMapの<文字列、オブジェクト> ();  
jsonMap.put(" A "1 );  
jsonMap.put(" B """ );  
jsonMap.put(" C "NULL );  
jsonMap.put(" D "" wuzhuti.cn " )。  
  
文字列str = JSONObject.toJSONString(jsonMap)。  
システム。アウト.println(STR);  
// 输出结果:{ "":1、 "B": ""  

 

出力結果から分かるように、対応するヌルキーが除外されています。我々が何をしたい明確ではないが、我々は属性SerializerFeatureのfastjsonシーケンスを使用する必要があります

この方法は次のとおりです。JSONObject.toJSONString(Object object, SerializerFeature... features)

SerializerFeature便利列挙

QuoteFieldNames ---- 鍵は二重引用符、デフォルトはtrueかどうかを出力
WriteMapNullValue ---フィールドの出力がnullであるかどうか、デフォルトはfalse 
WriteNullNumberAsZero- - 数値フィールドnullの場合、出力は0で、NOT NULL 
WriteNullListAsEmpty--リストフィールドがnullの場合、出力は[]、NOT NULLである
WriteNullStringAsEmpty-文字型フィールドがnullの場合、出力は「」ではないnullである
偽のブールフィールドがnullの場合WriteNullBooleanAsFalse-、出力、nullではありません

今すぐ追加

地図<文字列、オブジェクト> jsonMap = 新しい HashMapの<文字列、オブジェクト> ();  
jsonMap.put(" A "1 );  
jsonMap.put(" B """ );  
jsonMap.put(" C "NULL );  
jsonMap.put(" D "" wuzhuti.cn " )。  
  
文字列str = JSONObject.toJSONString(jsonMap、SerializerFeature.WriteMapNullValue)。  
システム。アウト.println(STR);  
//输出结果:{ "":1、 "B": ""、 "C":ヌル、 "D": "wuzhuti.cn"}  

WriteNullStringAsEmptyも加える場合は、髪のために動作しませんか?

文字列str = JSONObject.toJSONString(jsonMap、SerializerFeature.WriteMapNullValue、SerializerFeature.WriteNullStringAsEmpty)。  
システム。アウト.println(STR);  
// 输出结果:{ "":1、 "B": ""、 "C":ヌル、 "D": "wuzhuti.cn"}  

現在のソリューションは、フィルタを追加することです

プライベート ValueFilterフィルタ= 新しいValueFilter(){ 
    @Override 
    パブリックオブジェクト処理(オブジェクトobj、ストリングS、オブジェクトV){
     場合(V == NULL リターン "" リターンV; 
    } 
}。
JSON.toJSONString(jsonMap、フィルタ)

しかし、心の不幸、なぜああ動作しませんか?SerializerFeature.WriteNullStringAsEmpty

fastjson githubの:  https://github.com/alibaba/fastjson

おすすめ

転載: www.cnblogs.com/JonaLin/p/11577804.html