fastjson解析json

maven引入

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.48</version>
</dependency>

JSONobject是FastJson提供的对象,在api中是用一个私有的常量map进行封装的,实际就是一个map,只不过FastJson对其进行了封装

 

1、把对象转换成JSON数据(String)

String jsonStrng = JSON.toJSONString(object);
//支持的类型:JavaBean, List<JavaBean>, List<String>, List<Map<String,Object>

HashMap<String,String>map = new HashMap<>();
map.put("a","1");
map.put("b","2");
map.put("c","3");
String json = JSON.toJSONString(map);//map转String
JSONObject jsonObject = JSON.parseObject(json);//String转json
//json转map
Map<String, String> jsonMap = JSONObject.toJavaObject(jsonObject, Map.class);
 //String转map
Map<String, String> jsonMap1 = JSONObject.parseObject(json, Map.class);

 

 2、解析JSON数据

JavaBean
Person person = JSON.parseObject(jsonString, Person.class);

List< JavaBean >

List<Person> listPerson =JSON.parseArray(jsonString, Person.class);

List< String >

List<String> listString = JSON.parseArray(jsonString, String.class);

List< Map< String,Object > >

List<Map<String, Object>> listMap = JSON.parseObject(jsonString, new TypeReference<List<Map<String,Object>>>(){}); 

Map< String, List< BasicPojo > >

Map<String,List<BasicPojo>> rolePts = JSON.parseObject(permission, new TypeReference<Map<String,List<BasicPojo>>>(){});

 

3、常见问题

3.1、把对象转成JSON字符串缺少字段


比如缺少:pId,uName 等字段
原因:检查对象的get set 方法,一般是自动生成的代码大小写错误,确定方法为:setPId(...) getPId()

3.2、把对象转成JSON字符串缺少值为NULL的字段


使用方法:JSONObject.toJSONString(Object object, SerializerFeature... features)

Map<String , Object> jsonMap = new HashMap<String ,Object>();  
jsonMap.put("a",1);  
jsonMap.put("b","");  
jsonMap.put("c",null);  
jsonMap.put("d","wuzhuti.cn");    
String str = JSONObject.toJSONString(jsonMap,SerializerFeature.WriteMapNullValue);  
System.out.println(str);  
//输出结果:{"a":1,"b":"","c":null,"d":"wuzhuti.cn"}  
Fastjson的SerializerFeature序列化属性
QuoteFieldNames———-输出key时是否使用双引号,默认为true 
WriteMapNullValue——–是否输出值为null的字段,默认为false 
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null 
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null 
WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null 
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null