java中fastjson生成和解析json数据(序列化和反序列化数据)
本文讲解2点:
1. fastjson生成和解析json数据
(举例:4种常用类型:javabean,list<javabean>,list<string>,list<map<string,object>)
2.通过一个android程序测试fastjson的用法。
fastjson简介:
fastjson是一个java语言编写的高性能功能完善的json库。fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson。并且还超越了google的二进制协议protocol buf。fastjson完全支持的标准,也是官方网站收录的参考实现之一。支持各种jdk类型。包括基本类型、javabean、collection、map、enum、泛型等。支持jdk 5、jdk 6、android、阿里云手机等环境。
一. fastjson生成json字符串(javabean,list<javabean>,list<string>,list<map<string,object>)
string jsonstrng = json.tojsonstring(object);
二. fastjson 解析json字符串为四种类型
1. javabean
person person = json.parseobject(jsonstring, person.class);
2. list<javabean>
list<person> listperson =json.parsearray(jsonstring, person.class);
3. list<string>
list<string> liststring = json.parsearray(jsonstring, string.class);
4. list<map<string,object>>
list<map<string, object>> listmap = json.parseobject(jsonstring, new typereference<list<map<string,object>>>(){});
(注意:此处可看出fastjson反射机制比gson更准确, id = 1001 通过fastjson反射仍是 id = 1001 , 而通过gson反射结果 为 id =1001.0 ,
json解析器fastjson(阿里巴巴出品,版本1.1.26),如果定义了jsonobject为{"jackie_zhang":"张学友","andy_lau":"刘德华","liming":"黎明","aaron_kwok":"郭富城"},那么读取值时,key顺序无序,测试代码:
import comalibabafastjsonjsonobject; /** * created by wangzhenfei on 14-4- */ public class fastjsontest { public static void main(string[] args){ string jsonstr = "{\"jackie_zhang\":\"张学友\",\"andy_lau\":\"刘德华\",\"liming\":\"黎明\",\"aaron_kwok\":\"郭富城\"}" ; //做5次测试 for(int i=0,j=5;i<j;i++) { jsonobject jsonobject = jsonobjectparseobject(jsonstr) ; for(javautilmapentry<string,object> entry:jsonobjectentryset()){ systemoutprint(entrygetkey()+"-"+entrygetvalue()+"\t"); } systemoutprintln();//用来换行 } } }
运行结果:
liming-黎明 aaron_kwok-郭富城jackie_zhang-张学友andy_lau-刘德华 aaron_kwok-郭富城 andy_lau-刘德华liming-黎明jackie_zhang-张学友 aaron_kwok-郭富城 jackie_zhang-张学友andy_lau-刘德华liming-黎明 liming-黎明 andy_lau-刘德华jackie_zhang-张学友aaron_kwok-郭富城 jackie_zhang-张学友 liming-黎明andy_lau-刘德华aaron_kwok-郭富城
解决办法:定义为jsonarray,代码如下:
import comalibabafastjsonjsonarray; /** * created by wangzhenfei on 14-4- */ public class fastjsontest { public static void main(string[] args){ string jsonstr = "[{\"jackie_zhang\":\"张学友\"},{\"andy_lau\":\"刘德华\"},{\"liming\":\"黎明\"},{\"aaron_kwok\":\"郭富城\"}]" ; //做5次测试 for(int i=0,j=5;i<j;i++) { jsonarray jsonarray = jsonarrayparsearray(jsonstr); for(int k=0;k<jsonarraysize();k++){ systemoutprint(jsonarrayget(k) + "\t"); } systemoutprintln();//用来换行 } } }
运行结果为:
{"jackie_zhang":"张学友"} {"andy_lau":"刘德华"}{"liming":"黎明"}{"aaron_kwok":"郭富城"} {"jackie_zhang":"张学友"} {"andy_lau":"刘德华"}{"liming":"黎明"}{"aaron_kwok":"郭富城"} {"jackie_zhang":"张学友"} {"andy_lau":"刘德华"}{"liming":"黎明"}{"aaron_kwok":"郭富城"} {"jackie_zhang":"张学友"} {"andy_lau":"刘德华"}{"liming":"黎明"}{"aaron_kwok":"郭富城"} {"jackie_zhang":"张学友"} {"andy_lau":"刘德华"}{"liming":"黎明"}{"aaron_kwok":"郭富城"}
如果就想要定义为jsonobject,而不是jsonarray,可以选用其他json解析器,个人推荐使用google的gson,文档明显比fastjson好很多(从这里可以看出阿里巴巴和谷歌的差距):
import comgooglegsonjsonelement; import comgooglegsonjsonobject; import comgooglegsonjsonparser; /** * created by wangzhenfei on 14-4- */ public class fastjsontest { public static void main(string[] args){ string jsonstr = "{\"jackie_zhang\":\"张学友\",\"andy_lau\":\"刘德华\",\"liming\":\"黎明\",\"aaron_kwok\":\"郭富城\"}" ; //做5次测试 for(int i=0,j=5;i<j;i++) { jsonobject jsonobject = (jsonobject) new jsonparser()parse(jsonstr); for(javautilmapentry<string,jsonelement> entry:jsonobjectentryset()){ systemoutprint(entrygetkey()+"-"+entrygetvalue()+"\t"); } systemoutprintln();//用来换行 } } }
运行结果:
jackie_zhang-"张学友" andy_lau-"刘德华" liming-"黎明" aaron_kwok-"郭富城" jackie_zhang-"张学友" andy_lau-"刘德华" liming-"黎明" aaron_kwok-"郭富城" jackie_zhang-"张学友" andy_lau-"刘德华" liming-"黎明" aaron_kwok-"郭富城" jackie_zhang-"张学友" andy_lau-"刘德华" liming-"黎明" aaron_kwok-"郭富城" jackie_zhang-"张学友" andy_lau-"刘德华" liming-"黎明" aaron_kwok-"郭富城"
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读