Fastjson常用方法
转载地址:https://blog.****.net/authority39/article/details/81123802
一、解析json字符串并获取数据
1.把json字符串转换为实体类
1.1、直接解析为对象(支持深度解析)
T t = JSON.parseObject(jsonstr, T.class); // 解析{...}为对象
List<t> list = JSON.parseArray(jsonstr, T.class); // 解析[{},{}...]为集合
1.2、解析为JSON对象
1.2.1、如果不知道json字符串具体是JSONObject还是JSONArray可以使用
Object obj = JSON.parse(jsonstr); // obj可能为String、JSONArray、JSONObject
1.2.2、如果确定字符串为JSONObject类型
JSONObject parseObject = JSON.parseObject(jsonstr);
1.2.3、如果确定字符串为JSONArray类型
JSONArray jsonarry = JSON.parseArray(jsonstr);
2.获取JSONArray对象中的数据
2.1、获取JSONArray中的单个元素作为JSONObject
JSONObject jsonobject = JSONArray.get(i);
2.2、获取JSONArray中的单个元素作为解析后的实体类(直接封装为实体类)
T t = JSONArray.getObject(i, T.class);
2.3、遍历JSONArray
JSONArray jsonarray = JSON.parseArray(jsonstr);
for(int i=0;i<jsonarray.size();i++){
JSONObject jsonobject = JSONArray.get(i);
T t = JSONArray.getObject(i, T.class);
}
3.获取JSONObject对象中的数据
3.1、获取JSONObject中的数据
Byte byte1 = parseObject.getByte(key);
byte byteValue = parseObject.getByteValue(key);
Short short1 = parseObject.getShort(key);
short shortValue = parseObject.getShortValue(key);
Integer integer = parseObject.getInteger(key);
int intValue = parseObject.getIntValue(key);
Long long1 = parseObject.getLong(key);
long longValue = parseObject.getLongValue(key);
Float float1 = parseObject.getFloat(key);
float floatValue = parseObject.getFloatValue(key);
Double double1 = parseObject.getDouble(key);
double doubleValue = parseObject.getDoubleValue(key);
// 以下四个最常用..
String string = parseObject.getString(key);
JSONArray jsonArray = parseObject.getJSONArray(key);
JSONObject jsonObject = parseObject.getJSONObject(key);
Object object = parseObject.get(key); // object类型为JSONArray或JSONObject或String
3.2、遍历JSONObject
Set<String> keySet = JSONObject.keySet();
for(String key : keySet){
Object value = keySet.get(key); // value类型为JSONArray或JSONObject或String
}
二、格式化对象为json字符串
1.默认对象转为json字符串的方法
JSON.toJSONString(Object);
2.上诉方法可以把对象转为JSON格式的字符串,但是存在部分缺陷.推荐使用以下转换方式
SerializerFeature quotefieldnames = SerializerFeature.QuoteFieldNames; // 输出的结果不带双引号
SerializerFeature writemapnullvalue = SerializerFeature.WriteMapNullValue; // 打印出null值得字段
SerializerFeature writenullstringasempty = SerializerFeature.WriteNullStringAsEmpty; // null值字段显示为""
SerializerFeature writenulllistasempty = SerializerFeature.WriteNullListAsEmpty; // null值数组显示为[]
JSON.toJSONString(obj, quotefieldnames, writemapnullvalue, writenullstringasempty, writenulllistasempty);
3.SerializerFeature详细说明见下图(图片来自网络,非原创)
4.应用:当我们需要编写一个返回结果为json格式字符串的接口时。我们在最外层的返回类型中可以使用JSONObject代替String
理由:我们返回json数据的时候如果使用String,返回结果可能是这样:"{\"resultcode\" : \"success\", \"resultdesc\" : \"成功\" }"
但是如果使用JSONObject,返回结果就会是这样:{"resultcode" : "success", "resultdesc" : "成功" }