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完全支持http://json.org的标准,也是官方网站收录的参考实现之一。支持各种JDK类型。包括基本类型、JavaBean、Collection、Map、Enum、泛型等。支持JDK 5、JDK 6、Android、阿里云手机等环境。 一. fastjson生成json字符串(JavaBean,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":"张学友","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-"郭富城" 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 计算方法调用栈大小来检查StackOverflowException
- java – 在处理程序中组装一个Netty消息
- 【SpringBoot】15. Spring Boot核心注解
- 线程“main”中的异常java.lang.OutOfMemoryError:GWT应用
- 如何解决Jackson无法处理JPA bean中的直接自引用问题
- java – Hadoop Map Reduce For Google web graph
- java – 改进主筛算法
- java – Firebase在发布模式下找不到与对象一起序列化的属性
- 找不到Java 9 Zip End Header异常
- 设置Java系统属性而不将值放在命令行上