alibaba fastjson 顺序解析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了alibaba fastjson 顺序解析相关的知识,希望对你有一定的参考价值。
参考技术A 正常情况下,fastjson是将json数据放到HashMap里面的,输出后没有顺序,如下:String jsonStrInit="\"size\":\"7.5\",\"width\":\"M (B)\"";
JSONObject jsonObj = JSON.parseObject(jsonStrInit);
for(Map.Entry<String,String> entry : jsonObj.entrySet())
System.out.println(entry.getKey() +":"+ entry.getValue());
参考了网友的做法,才发现还有这个小妙招,记录一下
System.out.println("有序遍历结果:");
LinkedHashMap<String,String> jsonMap = JSON.parseObject(jsonStrInit,newTypeReference<LinkedHashMap<String,String>>() );
for(Map.Entry<String,String> entry : jsonMap.entrySet())
System.out.println(entry.getKey() +":"+ entry.getValue());
使用google的Gson库和alibaba的Fastjson库解析json数据的区别
问题:
项目中原先使用gson解析数据,后来由于各种原因换成了fastjson;那么问题来了,如果你定义的实体对象的属性方法和属性名不一致,那么fastjson解析的数据始终为空,而gson始终可以解析。
原理:
gson解析使用的是属性匹配法,无论你属性方法定义成什么样。
fastjson使用的属性方法匹配法,即你必须将要获取的数据的属性字段和方法字段定义成getXX()才个可以。
eg:private String code;public String getCode(){ return code; }
利弊
有一种情况,后台两个接口,拿去相同的数据,但是返回的个别字段不一样,后台又不愿意改,你前端又不想在重新写一个类,这怎么办呢?
接口一的数据:
{
"title":"接口一",
"url":"http://www.baidu.com"
}
接口二的数据:
{
"title":"接口一",
"urlTmp":"http://www.baidu.com"
}
使用gson很方便:只要定义一个抽象类,两个接口实现不同的字段,就ok了
abstarct class C{
private String title;
public abstarct String getUrl();
}
class A extends C{
//只要实现抽象方法就好
private String url;
public String getUrl(){ return url;}
}
class B extends C{
private String urlTmp;
public String getUrl(){ return urlTmp;}
}
而fastjson,就解析不了;但可以绕过,采用Map对象去解析,这就比较麻烦了
以上是关于alibaba fastjson 顺序解析的主要内容,如果未能解决你的问题,请参考以下文章
fastjson解析错误.JSONException: Rounding necessary
fastjson 解析报错 com.alibaba.fastjson.JSONException: create instance error...
使用google的Gson库和alibaba的Fastjson库解析json数据的区别
全解史上最快的JSON解析库 - alibaba Fastjson