转json对象如何保留空值?
JSONWriter中有配置项,在JSONReader中没找到
public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(0, "a"); map.put(1, "b"); map.put(2, null); map.put(3, "c"); String header = JSON.toJSONString(map, JSONWriter.Feature.WriteMapNullValue); System.out.println(header); JSONObject jsonObject = JSON.parseObject(header); System.out.println(jsonObject); }
原提问者GitHub用户yuankc
JSONWriter类在fastjson库中提供,可以通过该类的特性来保留空值。而在JSONReader中,默认情况下保留空值已经是默认行为,没有特殊的配置项。
下面是演示代码,可以使用JSONWriter中的WriteMapNullValue特性来保留map中的null值:
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.JSONWriter;
import java.util.HashMap; import java.util.Map;
public class Demo {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(0, "a");
map.put(1, "b");
map.put(2, null);
map.put(3, "c");
String jsonStr = JSON.toJSONString(map, JSONWriter.WriteMapNullValue);
System.out.println(jsonStr);
JSONObject jsonObject = JSON.parseObject(jsonStr);
System.out.println(jsonObject.toJSONString());
}
} 在上述代码中,将WriteMapNullValue特性传递给了JSON.toJSONString()方法,就可以保留空值。输出结果如下:
{"0":"a","1":"b","2":null,"3":"c"} {"0":"a","1":"b","2":null,"3":"c"} 可以看到,两个输出结果中都保留了map中的空值。如果不传递WriteMapNullValue特性,则会省略掉null值,输出结果如下:
{"0":"a","1":"b","3":"c"} {"0":"a","1":"b","3":"c"} 可以看到,省略掉了map中的null值。最后的JSONObject.toJSONString()其实可以省略,直接输出JSONObject对象也是一样的。
你打开 jsonObject 对象看看,里面的属性就是 null,JSONReader不需要设置保留null,因为它就是null,为什么你最后一次打印没打印出来,因为默认不打印空值。。。。 JSON.toJSONString(jsonObject, JSONWriter.Feature.WriteNulls)
原回答者GitHub用户yangcanlin
转JSONObject时对于value的值使用“new TypeReference<Map<String,Object>>(){}”可保留null值
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。