Json数据解析

来源:互联网 发布:windows xp原装系统 编辑:程序博客网 时间:2024/05/29 18:33

在开发Android的过程中,如果我们经常与服务器打交道,更新数据等等,那么json必然是个好的数据格式,但是有了json我们要解析它,使用原生的解析也可以,但是很不高效,所以这里介绍两种json数据解析的方式,一种是FastJSon ,这个是阿里巴巴出的,号称最快的解析速度。第二种使我们伟大的Google提供的Gson 来解析json,两个解析json都很方便,而且都很强大。


使用Android自带JSONObject解析JSON数据

JSONObject jsonObject = new JSONObject(responseString);
int code = jsonObject.getInt("code");
// org.json.JSONException: No value for msg 、之后跳出循环,执行报异常处理、
JSONObject entry = jsonObject.getJSONObject("entry");
// LogUtils.e("mxg","msg == "+ entry.getString("msg"));   // entry在Json作为一个自定义的类、


JSONObject  optStringgetString

getString(String name)与optString(String name),功能一样,只是当无返回值时,getString(String name)抛出错误,optString(String name)返回空值


getString(String name)
Returns the value mapped by name if it exists, coercing it if necessary, or throws if no such mapping exists.

optString(String name)
Returns the value mapped by name if it exists, coercing it if necessary, or the empty string if no such mapping exists.


// 接口返回不同的 message 字段
JSONObject jsonObject = new JSONObject(msg);
String message = jsonObject.optString("Message","MessageFailure");
if(message.equals("MessageFailure")){
message =  jsonObject.optString("message","messageFailure");
if(message.equals("messageFailure")){
message =  jsonObject.optString("msg","msg");
}
}



FastJson的基本使用

Github:fastjson比gson快大约6倍,测试结果上这里:https://github.com/eishay/jvm-serializers/wiki/Staging-Results 。
gson的g可能是“龟”拼音的缩写,龟速的json库。

这里值得注意的是, 默认的构造函数一定要写,不然是无法解析的。(对于fastjson 严格按照JavaBean的规范来,有一点不对就无法解析,这里一定要切记,每一个实体类的属性的get , set 方法必须写,切方法第四个字母必须大写,最好使用Eclipse的source->genreal setters and getters 生成get,set 方法,切记,切记 )。
对于Gson 这里就没有这么多的要求了,但最好还是按照JavaBean来写,避免一些位置的错误。


compile 'com.alibaba:fastjson:1.1.54.android'
Fastjson提供Android版本,和标准版本相比,Android版本去掉一些Android虚拟机dalvik不支持的功能,使得jar更小,同时针对dalvik做了很多性能优化,包括减少方法调用等。

1、将Java类型的对象转换为JSON格式的字符串:
String jsonString = JSON.toJSONString(map);
2、将JSON格式的字符串转换为java类型的对象:
public static <T> T deserialize(String json, Class<T> clz) {
         return JSON.parseObject(json, clz);
}
3、将JSON格式的字符串转换为List<T>类型的对象:
public static <T> List<T> deserializeList(String json, Class<T> clz) {
         return JSON.parseArray(json, clz);
}



原创粉丝点击