fastjosn toJSONString parseObject 保留null值,保持字段顺序
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
fastjosn
SerializerFeature.WriteMapNullValue(JSON.toJSONString)
转jsonString时对于value的值使用“SerializerFeature.WriteMapNullValue”可保留null值
public static void main(String[] args) {
List<Map<String, String>> list = new ArrayList<>();
Map map1 = new HashMap(2);
map1.put("id", "66217");
map1.put("name", null);
Map map2 = new HashMap(2);
map2.put("id", "98504");
map2.put("name", null);
list.add(map1);
list.add(map2);
JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(list, new JsonFilter()));
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(map1, new JsonFilter()));
System.out.println("使用JsonFilter过滤器过滤,list转jsonArray " + jsonArray);
System.out.println("使用JsonFilter过滤器过滤,list转jsonObject " + jsonObject);
//转jsonString时对于value的值使用”SerializerFeature.WriteMapNullValue“保留null值
String jsonString = JSON.toJSONString(map1, SerializerFeature.WriteMapNullValue);
System.out.println("map转jsonString " + jsonString);
String jsonString1 = JSON.toJSONString(list, SerializerFeature.WriteMapNullValue);
System.out.println("list转jsonString " + jsonString1);
String result = "{\"errorCode\":null,\"errorMsg\":null,\"result\":[{\"id\":\"123\",\"name\":null,\"age\":\"1\"},{\"id\":\"1234\",\"name\":null,\"age\":\"1\"}],\"success\":true}";
String jsonString2 = JSON.toJSONString(result, SerializerFeature.WriteMapNullValue);
System.out.println("String转jsonString " + jsonString2);
}
JsonFilter过滤器类
虽然过滤器可以将键值对中value为null的值转换为空字符串打印出来,但使用场景受限
public class JsonFilter implements ValueFilter {
@Override
public Object process(Object o, String s, Object v) {
if (v == null) {
return "";
}
return v;
}
}
运行结果如下:
1、过滤器将value为null的值转化为了空字符串
2、“SerializerFeature.WriteMapNullValue”将value为null的值保留了下来
new TypeReference<Map<String,Object>>(){}(JSONObject.parseObject)
1、转JSONObject时对于value的值使用“new TypeReference<Map<String,Object>>(){}”可保留null值,但对于json数组中value为null的值没有效果
2、Feature.OrderedField 保持字段顺序不乱序
public static void main(String[] args) {
String result ="{\"errorCode\":null,\"errorMsg\":null,\"result\":[{\"id\":\"123\",\"name\":null,\"age\":\"1\",\"height\":\"123\",\"weight\":\"123\"},{\"id\":\"1234\",\"name\":null,\"age\":\"1\",\"height\":\"123\",\"weight\":\"123\"}],\"success\":true}";
JSONObject jsonObject1 = JSON.parseObject(result);
System.out.println("直接打印result" + jsonObject1);
System.out.println("/");
//new TypeReference<Map<String,Object>>(){} 可以将键值对中value为null的值保留下来,但对于json字符串数组内的null值保存不下来
//Feature.OrderedField 将转换为json的字段顺序保持一致
Map<String,Object> map = JSONObject.parseObject(result,new TypeReference<Map<String,Object>>(){}, Feature.OrderedField);
System.out.println(map);
System.out.println("/");
//SerializerFeature.WriteMapNullValue == WriteMapNullValue
//对于json字符串数组内的null值使用JSONObject.toJSONString(map, SerializerFeature.WriteMapNullValue)保留下来,但是键上会多出双引号
String jsonString = JSONObject.toJSONString(map, SerializerFeature.WriteMapNullValue);
System.out.println(jsonString);
}
ps:网上有一种说法,对于转json时的null值实际上是存在的,只是没打印出来。
另外对于数据内的null值,各位大佬有好的解决办法麻烦评论区踢我一下。
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献1条内容
所有评论(0)