本文讲解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,43)"> 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,参考前篇程序运行结果图GSON方式生成和解析json数据)
-----------------------------------------------------------------------------------------------------------------------------------------
程序运行结果:
1. 点击“解析Person数据”按钮
2. 点击“解析Persons数据按钮”
3.点击“解析listString数据”按钮
4.点击“解析listMap数据”按钮
--------------------------------------------------------------------------------------------------------------------------------------
客户端eclipse android工程目录(左边)服务器端myeclipse web工程(右边)
---------------------------------------------------------------------------------------------------------------------------------------
服务器端 fastjson_Project
1.FastJsonAction.java
- packagecom.fastjson.action;
-
- importjava.io.IOException;
- importjava.io.PrintWriter;
-
- importjavax.servlet.ServletException;
- importjavax.servlet.http.HttpServlet;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importcom.fastjson.service.FastJsonService;
- importcom.fastjson.tools.*;
- publicclassFastJsonActionextendsHttpServlet{
-
-
- */
- voiddestroy(){
- super.destroy();
- //Putyourcodehere
- }
- *ThedoGetmethodoftheservlet.<br>
- *
- *Thismethodiscalledwhenaformhasitstagvaluemethodequalstoget.
- *@paramrequesttherequestsendbytheclienttotheserver
- *@paramresponsetheresponsesendbytheservertotheclient
- *@throwsServletExceptionifanerroroccurred
- *@throwsIOExceptionifanerroroccurred
- */
- voiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsServletException,IOException{
- this.doPost(request,response);
- }
- /**
- *ThedoPostmethodoftheservlet.<br>
- *
- *Thismethodiscalledwhenaformhasitstagvaluemethodequalstopost.
- *@paramrequesttherequestsendbytheclienttotheserver
- *@paramresponsetheresponsesendbytheservertotheclient
- *@throwsServletExceptionifanerroroccurred
- *@throwsIOExceptionifanerroroccurred
- voiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
- response.setContentType("text/html;charset=utf-8");
- request.setCharacterEncoding("utf-8");
- response.setCharacterEncoding("utf-8");
- Stringaction_flag=request.getParameter("action_flag");
- PrintWriterout=response.getWriter();
- if("person".equals(action_flag)){
- //Stringperson=GsonTools.creatJsonString(GsonService.getPerson());
- Stringperson=FastJsonTools.createJsonString(FastJsonService.getPerson());
- out.println(person);
- System.out.println(person);
- }elseif("persons".equals(action_flag)){
- //Stringpersons=GsonTools.creatJsonString(GsonService.getListPersons());
- Stringpersons=FastJsonTools.createJsonString(FastJsonService.getListPersons());
- out.println(persons);
- System.out.println(persons);
- }if("listString".equals(action_flag)){
- //StringlistString=GsonTools.creatJsonString(GsonService.getListString());
- StringlistString=FastJsonTools.createJsonString(FastJsonService.getListString());
- out.println(listString);
- System.out.println(listString);
- if("listMap".equals(action_flag)){
- //StringlistMap=GsonTools.creatJsonString(GsonService.getListMap());
- StringlistMap=FastJsonTools.createJsonString(FastJsonService.getListMap());
- out.println(listMap);
- System.out.println(listMap);
- System.out.println();
- out.flush();
- out.close();
- *Initializationoftheservlet.<br>
- *@throwsServletExceptionifanerroroccurs
- voidinit()throwsServletException{
- }
2.FastJsonService.java
packagecom.fastjson.service;
- importjava.util.ArrayList;
- importjava.util.HashMap;
- importjava.util.List;
- importjava.util.Map;
- importcom.fastjson.data.Person;
- classFastJsonService{
- staticPersongetPerson(){
- Personperson=newPerson(1001,"刘德华","香港");
- returnperson;
- staticList<Person>getListPersons(){
- List<Person>persons=newArrayList<Person>();
- Personperson1="香港");
- Personperson2=1002,"宋慧乔","韩国");
- persons.add(person1);
- persons.add(person2);
- returnpersons;
- staticList<String>getListString(){
- List<String>list=newArrayList<String>();
- list.add("美国");
- list.add("中国");
- list.add("俄罗斯");
- returnlist;
- staticList<java.util.Map<String,Object>>getListMap(){
- List<java.util.Map<String,Object>>list=newArrayList<Map<String,Object>>();
- java.util.Map<String,Object>map1=newHashMap<String,Object>();
- map1.put("id",1001);
- map1.put("name","刘德华");
- map1.put("address",108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> java.util.Map<String,Object>map2= map2.put("id",0); background-color:inherit">1002);
- map2.put("name","宋慧乔");
- map2.put("address",248)"> list.add(map1);
- list.add(map2);
- returnlist;
- }
3.FastJsonTools.java
packagecom.fastjson.tools;
- importcom.alibaba.fastjson.*;
- classFastJsonTools{
- staticStringcreateJsonString(Objectobject){
- StringjsonString="";
- try{
- jsonString=JSON.toJSONString(object);
- catch(Exceptione){
- //TODO:handleexception
- returnjsonString;
- 4.Person.java
packagecom.fastjson.data;
- classPerson{
- privateintid;
- privateStringname;
- privateStringaddress;
- publicPerson(){
- //TODOAuto-generatedconstructorstub
- intgetId(){
- returnid;
- voidsetId(intid){
- this.id=id;
- publicStringgetName(){
- returnname;
- voidsetName(Stringname){
- this.name=name;
- publicStringgetAddress(){
- returnaddress;
- voidsetAddress(Stringaddress){
- this.address=address;
- publicPerson(intid,Stringname,Stringaddress){
- super();
- this.id=id;
- this.address=address;
- @Override
- publicStringtoString(){
- return"Person[id="+id+",name="+name+",address="+address
- +"]";
- 5. TestFastJson.java
packagecom.fastjson.test;
- importcom.fastjson.tools.FastJsonTools;
- classTestFastJson{
- *@paramargs
- staticvoidmain(String[]args){
- //TODOAuto-generatedmethodstub
- //Test1Person
- System.out.println("FastJson数据格式测试结果:n");
- //Test2persons
- StringlistPerson=FastJsonTools.createJsonString(FastJsonService.getListPersons());
- //Test3listString
- //Test4listMap
- StringlistMap=FastJsonTools.createJsonString(FastJsonService.getListMap());
- System.out.println("测试结果1:"+person+"n");
- System.out.println("测试结果2:"+listPerson+"n");
- System.out.println("测试结果3:"+listString+"n");
- System.out.println("测试结果4:"+listMap);
-
客户端:android_fastjson
1.MainActivity.java
packagecom.android.mygson;
- importjava.io.ByteArrayOutputStream;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.io.Serializable;
- importjava.net.HttpURLConnection;
- importjava.net.URL;
- importcom.alibaba.fastjson.JSON;
- importcom.alibaba.fastjson.TypeReference;
- importcom.gson.data.Person;
- importcom.gson.http.HttpUtils;
- importandroid.os.Bundle;
- importandroid.os.StrictMode;
- importandroid.annotation.SuppressLint;
- importandroid.app.Activity;
- importandroid.content.Intent;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- classMainActivityextendsActivityimplementsOnClickListener{
- privateButtonperson,persons,listString,listMap;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- closeStrictMode();
- person=(Button)findViewById(R.id.person);
- persons=(Button)findViewById(R.id.persons);
- listString=(Button)findViewById(R.id.listString);
- listMap=(Button)findViewById(R.id.listMap);
- person.setOnClickListener(this);
- persons.setOnClickListener(this);
- listString.setOnClickListener( listMap.setOnClickListener(voidonClick(Viewv){
- switch(v.getId()){
- caseR.id.person:
- Stringurl_path="http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=person";
- StringjsonString=HttpUtils.getJsonContent(url_path,"utf-8");
- Personperson=FastJsonTools.getPerson(jsonString,Person.class);
- //用fastJson技术解析json字符串,转换为Person对象
- //Personperson=JSON.parSEObject(jsonString,Person.class);
- Intentintent=newIntent(MainActivity.this,OtherActivity. intent.putExtra("click_flag","person");
- intent.putExtra("person",(Serializable)person);
- startActivity(intent);
- //Log.i(TAG,person.toString());
- break;
- caseR.id.persons:
- Stringurl_path2="http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=persons";
- StringjsonString2=HttpUtils.getJsonContent(url_path2,0); background-color:inherit">//用fastjson将json字符串转换成List<Person>
- //List<Person>listPerson=JSON.parseArray(jsonString2,248)"> List<Person>listPerson=FastJsonTools.getPersons(jsonString2,153); font-weight:bold; background-color:inherit">class);
- Intentintent2= intent2.putExtra("click_flag","persons");
- intent2.putExtra("persons",(Serializable)listPerson);
- startActivity(intent2);
- break;
- caseR.id.listString:
- Stringurl_path3="http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=listString";
- StringjsonString3=HttpUtils.getJsonContent(url_path3,"utf-8");
- //用fastjson将json字符串转换成List<String>
- //List<String>listString=JSON.parseArray(jsonString3,String.class);
- List<String>listString=FastJsonTools.getPersons(jsonString3,String. Intentintent3= intent3.putExtra("click_flag","listString");
- intent3.putExtra("listString",(Serializable)listString);
- startActivity(intent3);
- caseR.id.listMap:
- Stringurl_path4="http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=listMap";
- StringjsonString4=HttpUtils.getJsonContent(url_path4,0); background-color:inherit">//用fastjson将json字符串转换成List<Map<String,Object>>
- //List<Map<String,Object>>listMap=JSON.parSEObject(jsonString4,newTypeReference<List<Map<String,Object>>>(){});
- List<Map<String,Object>>listMap=FastJsonTools.getListMap(jsonString4);
- Intentintent4= intent4.putExtra("click_flag","listMap");
- intent4.putExtra("listMap",(Serializable)listMap);
- intent4.putExtra("jsonString",jsonString4);
- startActivity(intent4);
- @SuppressLint("NewApi")
- voidcloseStrictMode(){
- StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder()
- .detectAll().penaltyLog().build());
- staticStringchangeInputStream(InputStreaminputStream,Stringencode)throwsIOException{
- StringjsonString=null;
- ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();
- byte[]data=newbyte[1024];
- intlen=0;
- while((len=inputStream.read(data))!=-1){
- outputStream.write(data,0,len);
- jsonString=newString(outputStream.toByteArray(),encode);
- inputStream.close();
- 2.OtherActivity.java
importjava.util.List;
- importjava.util.Map;
- importandroid.R.integer;
- importandroid.os.Bundle;
- importandroid.widget.TextView;
- classOtherActivityextendsActivity{
- privateTextViewtextView;
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_other);
- textView=(TextView)findViewById(R.id.msg);
- Intentintent=getIntent();
- Stringclick_flag=intent.getStringExtra("click_flag");
- if("person".equals(click_flag)){
- //接收Intent传递的Person对象
- Personperson=(Person)intent.getSerializableExtra("person");
- textView.setText(person.toString());
- //textView.setText("test:"+intent.getStringExtra("test"));
- if("persons".equals(click_flag)){
- //接收Intent传递的List<Person>参数
- @SuppressWarnings("unchecked")
- List<Person>list=(List<Person>)intent
- .getSerializableExtra("persons");
- Stringpersons="";
- for(Personperson:list){
- persons+=person.toString()+"n";
- textView.setText(persons);
- if("listString".equals(click_flag)){
- List<String>list=(List<String>)intent
- .getStringArrayListExtra("listString");
- StringlistString="";
- for(Strings:list){
- listString+=s+"n";
- textView.setText(listString);
- if("listMap".equals(click_flag)){
- //接收Intent传递的List<Map<String,Object>>参数
- .getSerializableExtra("listMap");
- StringlistMapString="";
- for(Map<String,Object>map:list){
- //遍历一个Map
- for(Map.Entry<String,Object>entry:map.entrySet()){
- Stringkey=entry.getKey();
- Objectvalue=entry.getValue();
- listMapString+=""+key+":"+value+"";
- listMapString+="n";
- textView.setText(listMapString+intent.getStringExtra("jsonString"));
- 3.FastJsonTools.java
importcom.alibaba.fastjson.JSON;
- importcom.alibaba.fastjson.TypeReference;
- *用fastjson将json字符串解析为一个JavaBean
- *@paramjsonString
- *@paramcls
- *@return
- static<T>TgetPerson(StringjsonString,Class<T>cls){
- Tt=null;
- t=JSON.parSEObject(jsonString,cls);
- e.printStackTrace();
- returnt;
- *用fastjson将json字符串解析成为一个List<JavaBean>及List<String>
- static<T>List<T>getPersons(StringjsonString,248)"> List<T>list=newArrayList<T>();
- list=JSON.parseArray(jsonString,0); background-color:inherit">*用fastjson将jsonString解析成List<Map<String,Object>>
- *@paramjsonString
- staticList<Map<String,Object>>getListMap(StringjsonString){
- //两种写法
- //list=JSON.parSEObject(jsonString,new
- //TypeReference<List<Map<String,Object>>>(){}.getType());
- list=JSON.parSEObject(jsonString,
- newTypeReference<List<Map<String,Object>>>(){
- });
- }
copy
packagecom.gson.data;
- importjava.io.Serializable;
- classPersonimplementsSerializable{
- 5.HttpUtils.java
packagecom.gson.http;
- importjava.net.HttpURLConnection;
- importjava.net.URL;
- /**接收path服务器端返回的InputStream,转换为json字符串
- *@authorben
- classHttpUtils{
- staticStringgetJsonContent(Stringurl_path,Stringencode){
- StringjsonString="";
- try{
- URLurl=newURL(url_path);
- HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();
- connection.setConnectTimeout(3000);
- connection.setRequestMethod("GET");
- connection.setDoInput(true);
- intresponseCode=connection.getResponseCode();
- if(200==responseCode){
- jsonString=changeInputStream(connection.getInputStream(),encode);
- //
- returnjsonString;
- 6.activity_matin.xml
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- Button
- android:id="@+id/person"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="解析Person数据"/>
- Button
- android:id="@+id/persons"
- android:layout_height="wrap_content"
- android:text="解析Persons数据"/>
- android:id="@+id/listString"
- android:text="解析listString数据" android:id="@+id/listMap"
- android:text="解析listMap数据"</LinearLayout>
7.activity_other.xml
<?xmlversion="1.0"encoding="utf-8"?>
- LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"TextView
- android:id="@+id/msg"
- 8.AndroidManifest.xml
manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.mygson"
- android:versionCode="1"
- android:versionName="1.0"uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="19"
- spanstyle="color:#ff0000;">uses-permissionandroid:name="android.permission.INTERNET"span>
- application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme"activity
- android:name="com.android.mygson.MainActivity"
- android:label="@string/app_name"intent-filteractionandroid:name="android.intent.action.MAIN"categoryandroid:name="android.intent.category.LAUNCHER"activityactivityandroid:name=".OtherActivity"applicationmanifest
-----------------------------------------------------------------------------------------------------------------
注意一点:
泛型方法
客户端:FastJsonToos.java 泛型方法的写法。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|