欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java中fastjson生成和解析json数据(序列化和反序列化数据)

程序员文章站 2024-03-06 23:49:32
本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:javabean,list,list

本文讲解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-"郭富城"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。