加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

fastjson生成和解析json数据

发布时间:2020-12-16 19:41:06 所属栏目:百科 来源:网络整理
导读:本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,ListJavaBean,ListString,ListMapString,Object) 2.通过一个android程序测试fastjson的用法。 fastjson简介: Fastjson是一个Java语言编写的高性能功能完善的JSON库。fastjson采用

本文讲解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

[java] view plain copy
  1. packagecom.fastjson.action;
  2. importjava.io.IOException;
  3. importjava.io.PrintWriter;
  4. importjavax.servlet.ServletException;
  5. importjavax.servlet.http.HttpServlet;
  6. importjavax.servlet.http.HttpServletRequest;
  7. importjavax.servlet.http.HttpServletResponse;
  8. importcom.fastjson.service.FastJsonService;
  9. importcom.fastjson.tools.*;
  10. publicclassFastJsonActionextendsHttpServlet{
  11. /**
  12. *Destructionoftheservlet.<br>
  13. */
  14. voiddestroy(){
  15. super.destroy();//Justputs"destroy"stringinlog
  16. //Putyourcodehere
  17. }
  18. *ThedoGetmethodoftheservlet.<br>
  19. *
  20. *Thismethodiscalledwhenaformhasitstagvaluemethodequalstoget.
  21. *@paramrequesttherequestsendbytheclienttotheserver
  22. *@paramresponsetheresponsesendbytheservertotheclient
  23. *@throwsServletExceptionifanerroroccurred
  24. *@throwsIOExceptionifanerroroccurred
  25. */
  26. voiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
  27. throwsServletException,IOException{
  28. this.doPost(request,response);
  29. }
  30. /**
  31. *ThedoPostmethodoftheservlet.<br>
  32. *
  33. *Thismethodiscalledwhenaformhasitstagvaluemethodequalstopost.
  34. *@paramrequesttherequestsendbytheclienttotheserver
  35. *@paramresponsetheresponsesendbytheservertotheclient
  36. *@throwsServletExceptionifanerroroccurred
  37. *@throwsIOExceptionifanerroroccurred
  38. voiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
  39. response.setContentType("text/html;charset=utf-8");
  40. request.setCharacterEncoding("utf-8");
  41. response.setCharacterEncoding("utf-8");
  42. Stringaction_flag=request.getParameter("action_flag");
  43. PrintWriterout=response.getWriter();
  44. if("person".equals(action_flag)){
  45. //Stringperson=GsonTools.creatJsonString(GsonService.getPerson());
  46. Stringperson=FastJsonTools.createJsonString(FastJsonService.getPerson());
  47. out.println(person);
  48. System.out.println(person);
  49. }elseif("persons".equals(action_flag)){
  50. //Stringpersons=GsonTools.creatJsonString(GsonService.getListPersons());
  51. Stringpersons=FastJsonTools.createJsonString(FastJsonService.getListPersons());
  52. out.println(persons);
  53. System.out.println(persons);
  54. }if("listString".equals(action_flag)){
  55. //StringlistString=GsonTools.creatJsonString(GsonService.getListString());
  56. StringlistString=FastJsonTools.createJsonString(FastJsonService.getListString());
  57. out.println(listString);
  58. System.out.println(listString);
  59. if("listMap".equals(action_flag)){
  60. //StringlistMap=GsonTools.creatJsonString(GsonService.getListMap());
  61. StringlistMap=FastJsonTools.createJsonString(FastJsonService.getListMap());
  62. out.println(listMap);
  63. System.out.println(listMap);
  64. System.out.println();
  65. out.flush();
  66. out.close();
  67. *Initializationoftheservlet.<br>
  68. *@throwsServletExceptionifanerroroccurs
  69. voidinit()throwsServletException{
  70. }

2.FastJsonService.java

copy
    packagecom.fastjson.service;
  1. importjava.util.ArrayList;
  2. importjava.util.HashMap;
  3. importjava.util.List;
  4. importjava.util.Map;
  5. importcom.fastjson.data.Person;
  6. classFastJsonService{
  7. staticPersongetPerson(){
  8. Personperson=newPerson(1001,"刘德华","香港");
  9. returnperson;
  10. staticList<Person>getListPersons(){
  11. List<Person>persons=newArrayList<Person>();
  12. Personperson1="香港");
  13. Personperson2=1002,"宋慧乔","韩国");
  14. persons.add(person1);
  15. persons.add(person2);
  16. returnpersons;
  17. staticList<String>getListString(){
  18. List<String>list=newArrayList<String>();
  19. list.add("美国");
  20. list.add("中国");
  21. list.add("俄罗斯");
  22. returnlist;
  23. staticList<java.util.Map<String,Object>>getListMap(){
  24. List<java.util.Map<String,Object>>list=newArrayList<Map<String,Object>>();
  25. java.util.Map<String,Object>map1=newHashMap<String,Object>();
  26. map1.put("id",1001);
  27. map1.put("name","刘德华");
  28. 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);
  29. map2.put("name","宋慧乔");
  30. map2.put("address",248)"> list.add(map1);
  31. list.add(map2);
  32. returnlist;
  33. }

3.FastJsonTools.java

copy
    packagecom.fastjson.tools;
  1. importcom.alibaba.fastjson.*;
  2. classFastJsonTools{
  3. staticStringcreateJsonString(Objectobject){
  4. StringjsonString="";
  5. try{
  6. jsonString=JSON.toJSONString(object);
  7. catch(Exceptione){
  8. //TODO:handleexception
  9. returnjsonString;
  10. 4.Person.java

    copy
      packagecom.fastjson.data;
    1. classPerson{
    2. privateintid;
    3. privateStringname;
    4. privateStringaddress;
    5. publicPerson(){
    6. //TODOAuto-generatedconstructorstub
    7. intgetId(){
    8. returnid;
    9. voidsetId(intid){
    10. this.id=id;
    11. publicStringgetName(){
    12. returnname;
    13. voidsetName(Stringname){
    14. this.name=name;
    15. publicStringgetAddress(){
    16. returnaddress;
    17. voidsetAddress(Stringaddress){
    18. this.address=address;
    19. publicPerson(intid,Stringname,Stringaddress){
    20. super();
    21. this.id=id;
    22. this.address=address;
    23. @Override
    24. publicStringtoString(){
    25. return"Person[id="+id+",name="+name+",address="+address
    26. +"]";
    27. 5. TestFastJson.java

      copy
        packagecom.fastjson.test;
      1. importcom.fastjson.tools.FastJsonTools;
      2. classTestFastJson{
      3. *@paramargs
      4. staticvoidmain(String[]args){
      5. //TODOAuto-generatedmethodstub
      6. //Test1Person
      7. System.out.println("FastJson数据格式测试结果:n");
      8. //Test2persons
      9. StringlistPerson=FastJsonTools.createJsonString(FastJsonService.getListPersons());
      10. //Test3listString
      11. //Test4listMap
      12. StringlistMap=FastJsonTools.createJsonString(FastJsonService.getListMap());
      13. System.out.println("测试结果1:"+person+"n");
      14. System.out.println("测试结果2:"+listPerson+"n");
      15. System.out.println("测试结果3:"+listString+"n");
      16. System.out.println("测试结果4:"+listMap);

      17. 客户端:android_fastjson

        1.MainActivity.java

        copy
          packagecom.android.mygson;
        1. importjava.io.ByteArrayOutputStream;
        2. importjava.io.IOException;
        3. importjava.io.InputStream;
        4. importjava.io.Serializable;
        5. importjava.net.HttpURLConnection;
        6. importjava.net.URL;
        7. importcom.alibaba.fastjson.JSON;
        8. importcom.alibaba.fastjson.TypeReference;
        9. importcom.gson.data.Person;
        10. importcom.gson.http.HttpUtils;
        11. importandroid.os.Bundle;
        12. importandroid.os.StrictMode;
        13. importandroid.annotation.SuppressLint;
        14. importandroid.app.Activity;
        15. importandroid.content.Intent;
        16. importandroid.view.View;
        17. importandroid.view.View.OnClickListener;
        18. importandroid.widget.Button;
        19. classMainActivityextendsActivityimplementsOnClickListener{
        20. privateButtonperson,persons,listString,listMap;
        21. @Override
        22. protectedvoidonCreate(BundlesavedInstanceState){
        23. super.onCreate(savedInstanceState);
        24. setContentView(R.layout.activity_main);
        25. closeStrictMode();//关闭严苛模式
        26. person=(Button)findViewById(R.id.person);
        27. persons=(Button)findViewById(R.id.persons);
        28. listString=(Button)findViewById(R.id.listString);
        29. listMap=(Button)findViewById(R.id.listMap);
        30. person.setOnClickListener(this);
        31. persons.setOnClickListener(this);
        32. listString.setOnClickListener( listMap.setOnClickListener(voidonClick(Viewv){
        33. switch(v.getId()){
        34. caseR.id.person:
        35. Stringurl_path="http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=person";
        36. StringjsonString=HttpUtils.getJsonContent(url_path,"utf-8");
        37. Personperson=FastJsonTools.getPerson(jsonString,Person.class);
        38. //用fastJson技术解析json字符串,转换为Person对象
        39. //Personperson=JSON.parSEObject(jsonString,Person.class);
        40. Intentintent=newIntent(MainActivity.this,OtherActivity. intent.putExtra("click_flag","person");
        41. intent.putExtra("person",(Serializable)person);
        42. startActivity(intent);
        43. //Log.i(TAG,person.toString());
        44. break;
        45. caseR.id.persons:
        46. Stringurl_path2="http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=persons";
        47. StringjsonString2=HttpUtils.getJsonContent(url_path2,0); background-color:inherit">//用fastjson将json字符串转换成List<Person>
        48. //List<Person>listPerson=JSON.parseArray(jsonString2,248)"> List<Person>listPerson=FastJsonTools.getPersons(jsonString2,153); font-weight:bold; background-color:inherit">class);
        49. Intentintent2= intent2.putExtra("click_flag","persons");
        50. intent2.putExtra("persons",(Serializable)listPerson);//用Intent传递List<Person>数据类型
        51. startActivity(intent2);
        52. break;
        53. caseR.id.listString:
        54. Stringurl_path3="http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=listString";
        55. StringjsonString3=HttpUtils.getJsonContent(url_path3,"utf-8");
        56. //用fastjson将json字符串转换成List<String>
        57. //List<String>listString=JSON.parseArray(jsonString3,String.class);
        58. List<String>listString=FastJsonTools.getPersons(jsonString3,String. Intentintent3= intent3.putExtra("click_flag","listString");
        59. intent3.putExtra("listString",(Serializable)listString);//用Intent传递List<Person>数据类型
        60. startActivity(intent3);
        61. caseR.id.listMap:
        62. Stringurl_path4="http://192.168.0.102:8080/fastjson_Project/servlet/FastJsonAction?action_flag=listMap";
        63. StringjsonString4=HttpUtils.getJsonContent(url_path4,0); background-color:inherit">//用fastjson将json字符串转换成List<Map<String,Object>>
        64. //List<Map<String,Object>>listMap=JSON.parSEObject(jsonString4,newTypeReference<List<Map<String,Object>>>(){});
        65. List<Map<String,Object>>listMap=FastJsonTools.getListMap(jsonString4);
        66. Intentintent4= intent4.putExtra("click_flag","listMap");
        67. intent4.putExtra("listMap",(Serializable)listMap);//用Intent传递List<Map<Sting,Object>>数据类型
        68. intent4.putExtra("jsonString",jsonString4);
        69. startActivity(intent4);
        70. @SuppressLint("NewApi")
        71. voidcloseStrictMode(){
        72. StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder()
        73. .detectAll().penaltyLog().build());
        74. staticStringchangeInputStream(InputStreaminputStream,Stringencode)throwsIOException{
        75. StringjsonString=null;
        76. ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();
        77. byte[]data=newbyte[1024];
        78. intlen=0;
        79. while((len=inputStream.read(data))!=-1){
        80. outputStream.write(data,0,len);
        81. jsonString=newString(outputStream.toByteArray(),encode);
        82. inputStream.close();
        83. 2.OtherActivity.java

          copy
            importjava.util.List;
          1. importjava.util.Map;
          2. importandroid.R.integer;
          3. importandroid.os.Bundle;
          4. importandroid.widget.TextView;
          5. classOtherActivityextendsActivity{
          6. privateTextViewtextView;
          7. super.onCreate(savedInstanceState);
          8. setContentView(R.layout.activity_other);
          9. textView=(TextView)findViewById(R.id.msg);
          10. Intentintent=getIntent();
          11. Stringclick_flag=intent.getStringExtra("click_flag");
          12. if("person".equals(click_flag)){//如果是点击person按钮
          13. //接收Intent传递的Person对象
          14. Personperson=(Person)intent.getSerializableExtra("person");
          15. textView.setText(person.toString());
          16. //textView.setText("test:"+intent.getStringExtra("test"));
          17. if("persons".equals(click_flag)){//如果是点击persons按钮
          18. //接收Intent传递的List<Person>参数
          19. @SuppressWarnings("unchecked")
          20. List<Person>list=(List<Person>)intent
          21. .getSerializableExtra("persons");
          22. Stringpersons="";
          23. for(Personperson:list){
          24. persons+=person.toString()+"n";
          25. textView.setText(persons);
          26. if("listString".equals(click_flag)){
          27. List<String>list=(List<String>)intent
          28. .getStringArrayListExtra("listString");
          29. StringlistString="";
          30. for(Strings:list){
          31. listString+=s+"n";
          32. textView.setText(listString);
          33. if("listMap".equals(click_flag)){
          34. //接收Intent传递的List<Map<String,Object>>参数
          35. .getSerializableExtra("listMap");
          36. StringlistMapString="";
          37. for(Map<String,Object>map:list){
          38. //遍历一个Map
          39. for(Map.Entry<String,Object>entry:map.entrySet()){
          40. Stringkey=entry.getKey();
          41. Objectvalue=entry.getValue();
          42. listMapString+=""+key+":"+value+"";
          43. listMapString+="n";
          44. textView.setText(listMapString+intent.getStringExtra("jsonString"));
          45. 3.FastJsonTools.java

            copy
              importcom.alibaba.fastjson.JSON;
            1. importcom.alibaba.fastjson.TypeReference;
            2. *用fastjson将json字符串解析为一个JavaBean
            3. *@paramjsonString
            4. *@paramcls
            5. *@return
            6. static<T>TgetPerson(StringjsonString,Class<T>cls){
            7. Tt=null;
            8. t=JSON.parSEObject(jsonString,cls);
            9. e.printStackTrace();
            10. returnt;
            11. *用fastjson将json字符串解析成为一个List<JavaBean>及List<String>
            12. static<T>List<T>getPersons(StringjsonString,248)"> List<T>list=newArrayList<T>();
            13. list=JSON.parseArray(jsonString,0); background-color:inherit">*用fastjson将jsonString解析成List<Map<String,Object>>
            14. *@paramjsonString
            15. staticList<Map<String,Object>>getListMap(StringjsonString){
            16. //两种写法
            17. //list=JSON.parSEObject(jsonString,new
            18. //TypeReference<List<Map<String,Object>>>(){}.getType());
            19. list=JSON.parSEObject(jsonString,
            20. newTypeReference<List<Map<String,Object>>>(){
            21. });
            22. }

            copy

              packagecom.gson.data;
            1. importjava.io.Serializable;
            2. classPersonimplementsSerializable{
            3. 5.HttpUtils.java

              copy
                packagecom.gson.http;
              1. importjava.net.HttpURLConnection;
              2. importjava.net.URL;
              3. /**接收path服务器端返回的InputStream,转换为json字符串
              4. *@authorben
              5. classHttpUtils{
              6. staticStringgetJsonContent(Stringurl_path,Stringencode){
              7. StringjsonString="";
              8. try{
              9. URLurl=newURL(url_path);
              10. HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();
              11. connection.setConnectTimeout(3000);
              12. connection.setRequestMethod("GET");
              13. connection.setDoInput(true);//从服务器获得数据
              14. intresponseCode=connection.getResponseCode();
              15. if(200==responseCode){
              16. jsonString=changeInputStream(connection.getInputStream(),encode);
              17. //
              18. returnjsonString;
              19. 6.activity_matin.xml

                [html] copy
                  <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
                1. xmlns:tools="http://schemas.android.com/tools"
                2. android:layout_width="match_parent"
                3. android:layout_height="match_parent"
                4. android:orientation="vertical">
                5. Button
                6. android:id="@+id/person"
                7. android:layout_width="match_parent"
                8. android:layout_height="wrap_content"
                9. android:text="解析Person数据"/>
                10. Button
                11. android:id="@+id/persons"
                12. android:layout_height="wrap_content"
                13. android:text="解析Persons数据"/>
                14. android:id="@+id/listString"
                15. android:text="解析listString数据" android:id="@+id/listMap"
                16. android:text="解析listMap数据"</LinearLayout>

                7.activity_other.xml

                copy
                  <?xmlversion="1.0"encoding="utf-8"?>
                1. LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
                2. android:orientation="vertical"TextView
                3. android:id="@+id/msg"
                4. 8.AndroidManifest.xml

                  copy
                    manifestxmlns:android="http://schemas.android.com/apk/res/android"
                  1. package="com.android.mygson"
                  2. android:versionCode="1"
                  3. android:versionName="1.0"uses-sdk
                  4. android:minSdkVersion="8"
                  5. android:targetSdkVersion="19" <!--添加访问网络的授权-->
                  6. spanstyle="color:#ff0000;">uses-permissionandroid:name="android.permission.INTERNET"span>
                  7. application
                  8. android:allowBackup="true"
                  9. android:icon="@drawable/ic_launcher"
                  10. android:label="@string/app_name"
                  11. android:theme="@style/AppTheme"activity
                  12. android:name="com.android.mygson.MainActivity"
                  13. android:label="@string/app_name"intent-filteractionandroid:name="android.intent.action.MAIN"categoryandroid:name="android.intent.category.LAUNCHER"activityactivityandroid:name=".OtherActivity"applicationmanifest
                    -----------------------------------------------------------------------------------------------------------------

                    注意一点:

                    泛型方法

                    客户端:FastJsonToos.java 泛型方法的写法。

                    (编辑:李大同)

                    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读