Android中的JSON解析方式:json; Gson ; Fastjson

本文主要介绍Json数据的解析  
----a,json数据的介绍  
----b,json数据的解析  
----c,gson数据的解析,谷歌公司的一种格式  
----d,fastjson数据的解析,阿里巴巴的一种格式  

通过本文的学习能掌握json数据格式的解析,为以后json格式数据的解析做到熟练于心。

Json的全称:JavaScript Object Notation

JSON的定义: 
       一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org

Json建构于两种结构:  
“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。   
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)  

JSON对象是一个无序的“‘名称/值’对”集合。 
一个对象以“{”(左括号)开始,“}”(右括号)结束。 
每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。 
如:      { 
“name”:”jackson”, 
    “age”:100 

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔 
如:{ 
“students”: 

{“name”:”jackson”,“age”:100}, 
{“name”:”michael”,”age”:51} 

Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。 

二。阿里巴巴FastJson技术的介绍

FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征: 
速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson。 
功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省。 
无依赖,能够直接运行在Java SE 5.0以上版本 
支持Android。 

三。JSON Vs XML 
1.JSON和XML的数据可读性基本相同 
2.JSON和XML同样拥有丰富的解析手段 
3.JSON相对于XML来讲,数据的体积小 
4.JSON与JavaScript的交互更加方便 
5.JSON对数据的描述性比XML较差 

四。android2.3提供的json解析类  

android的json解析部分都在包org.json下,主要有以下几个类:  

JSONObject :可以看作是一个json对象, 这是系统中有关 JSON 定义的基本单元,其包含一对儿 (Key/Value) 数值。它对外部 (External :   应用 toString() 方法输出的数值 调用的响应体现为一个标准的字符串(例如: {"JSON": "Hello, World"} ,最外被大括号包裹,其中的 Key Value 被冒号 ":" 分隔)。其对于内部 (Internal) 行为的操作格式略微,例如:初始化一个JSONObject 实例,引用内部的 put() 方法添加数值: new JSONObject().put("JSON", "Hello, World!") ,在 Key 和 Value 之间是以逗号 "," 分隔。 Value 的类型包括: Boolean 、 JSONArray、 JSONObject 、 Number 、 String 或者默认值 JSONObject.NULL object 。

JSONStringer :json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。

JSONArray : 它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:     [value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为,     get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。 同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。

JSONTokener :json解析类  
JSONException :json中用到的异常 

首先建立一个公共的Bean
[java]  view plaincopy
  1. package  com.qianfeng.domain;  
  2.   
  3. public   class  Person {  
  4.   
  5.      private   int  age;  
  6.      private  String name;  
  7.   
  8.      public  Person( int  age, String name) {  
  9.          super ();  
  10.          this .age = age;  
  11.          this .name = name;  
  12.     }  
  13.      @Override   
  14.      public  String toString() {  
  15.          return   "Person [age="  + age +  ", name="  + name +  "]" ;  
  16.     }  
  17.   
  18.      public   int  getAge() {  
  19.          return  age;  
  20.     }  
  21.   
  22.      public   void  setAge( int  age) {  
  23.          this .age = age;  
  24.     }  
  25.   
  26.      public  String getName() {  
  27.          return  name;  
  28.     }  
  29.   
  30.      public   void  setName(String name) {  
  31.          this .name = name;  
  32.     }  
  33.   
  34.      public  Person() {  
  35.          // TODO Auto-generated constructor stub   
  36.     }  
  37.   
  38. }  

Google Gson和alibaba FastJson的使用

作者:admin 发表时间:2013-05-20 09:04:00


客户端与服务器进行数据交互时,常常需要将数据在服务器端将数据转化成字符串并在客户端对json数据进行解析生成对象。但是用jsonObjectjsonArray解析相对麻烦。Gsonfastjson可以很方便的将下面四种常用的数据转换成json字符串,并将其解析成原数据对象

类型一:JavaBean

类型二:List<JavaBean>

类型三:List<String>

类型四:List<Map<Object,Object>>

一、Gson的使用

1、将上面的四种数据对象转换成json字符串的方法

             Gson gson = new Gson();

             String jsonString = gson.toJson(obj);

      2、将上面的四种类型生成的json字符串分别解析成数据对象的方法

             publicstatic <T> T getPerson(String jsonString , Class<T>cls) {

     Gson gson = new Gson();

     T t = null ;

     try{

       t = gson.fromJson(jsonString, cls);

     }catch(Exception e){

       System.out.println(111);

     }

     return t ;

  }

  publicstatic <T> List<T> getPersons(StringjsonString,Class<T> cls){

     List<T> list = new ArrayList<T>();

     Gson gson = new Gson();

     list = gson.fromJson(jsonString, newTypeToken<List<T>>(){}.getType());

     

     return list ;

  }

 

  publicstatic List<String> getStringList(String jsonString){

     List<String> list = newArrayList<String>();

     Gson gson = new Gson();

     list = gson.fromJson(jsonString, newTypeToken<List<String>>(){}.getType());

     

     return list ;

  }

 

  publicstatic List<Map<String,Object>> getMapList(String jsonString){

     List<Map<String,Object>> list = newArrayList<Map<String,Object>>();

     Gson gson = new Gson();

     list = gson.fromJson(jsonString,newTypeToken<List<Map<String,Object>>>(){}.getType());

     

     return list ;

  }

二、Alibaba  fastjson的使用

1、将上面的四种数据对象转换成json字符串的方法

String jsonString = JSON.toJSONString(obj);

      2、将上面的四种类型生成的json字符串分别解析成数据对象的方法

             publicstatic <T> T getPerson(String jsonString ,Class<T>cls){

     T t = null ;

     t = JSON.parseObject(jsonString,cls);

     return t;

  }  

  publicstatic <T> List<T> getPersons(StringjsonString ,Class<T> cls){

     List<T>  personList= new ArrayList<T>();    

     personList = JSON.parseArray(jsonString,cls);

     return personList;

     

  }

  publicstatic List<String> getStringList(StringjsonString){

     List<String> list = newArrayList<String>();

     list = JSON.parseObject(jsonString,newTypeReference<List<String>>(){});

     return list;

  }

 

  publicstatic List<Map<String ,Object>>getMapList(String jsonString){

     List<Map<String ,Object>> mapList = newArrayList<Map<String,Object>>();

     mapList = JSON.parseObject(jsonString,newTypeReference<List<Map<String,Object>>>(){});

     return mapList ;

  }



第一种方式:

Json方式:

[java]  view plaincopy
  1. public   class  JsonList {  
  2.   
  3.      public  JsonList() {  
  4.          // TODO Auto-generated constructor stub   
  5.     }  
  6.   
  7.      public   static  List<Person> getList() {  
  8.         List<Person> list =  new  ArrayList<Person>();  
  9.         list.add( new  Person( 1002 , "李四2" ));  
  10.         list.add( new  Person( 1003 , "李四3" ));  
  11.         list.add( new  Person( 1001 , "李四1" ));  
  12.          return  list;  
  13.     }  
  14.      public   static  Person getPerson(){  
  15.          return   new  Person( 1002 , "李四2" );   
  16.     }  
  17. }  
[java]  view plaincopy
  1. import  net.sf.json.JSON;  
  2. import  net.sf.json.JSONArray;  
  3. import  net.sf.json.JSONObject;  
  4. import  net.sf.json.JSONSerializer;  
  5.   
  6. public   class  JsonTools {  
  7.   
  8.      public  JsonTools() {  
  9.          // TODO Auto-generated constructor stub   
  10.     }  
  11.   
  12.      public   static  String getString(Person person) {  
  13.         JSON json = JSONSerializer.toJSON(JsonList.getPerson());  
  14.          return  json.toString();  
  15.     }  
  16.   
  17.      /**  
  18.      *   
  19.      * @param msgString  
  20.      * @return  
  21.      */   
  22.      public   static  Person getPerson(String msgString) {  
  23.         Person person =  new  Person();  
  24.         JSONArray array =  new  JSONArray();  
  25.         array.add(msgString);  
  26.         JSONObject obj = array.getJSONObject( 0 );  
  27.          // System.out.println(obj.get("age"));   
  28.          // System.out.println(obj.get("name"));   
  29.         person.setAge(obj.getInt( "age" ));  
  30.         person.setName(obj.getString( "name" ));  
  31.          return  person;  
  32.     }  
  33.   
  34.      public   static  String getListString(List<Person> listPersons) {  
  35.         JSON json = JSONSerializer.toJSON(listPersons);  
  36.          return  json.toString();  
  37.     }  
  38.   
  39.       
  40.      /**  
  41.      * 将一个json格式的字符串转换成行对应的对象  
  42.      * @param str  
  43.      * @return  
  44.      */   
  45.      public   static  List<Person> getPersons(String str) {  
  46.         List<Person> list =  new  ArrayList<Person>();  
  47.         JSONArray array =  new  JSONArray();  
  48.         array.add(str);  
  49.         JSONArray array2 = array.getJSONArray( 0 );  
  50.          for  ( int  i =  0 ; i <array2.size(); i++) {  
  51.             JSONObject jsonObject =  array2.getJSONObject(i);  
  52.             Person person =  new  Person();  
  53.             person.setAge(jsonObject.getInt( "age" ));  
  54.             person.setName(jsonObject.getString( "name" ));  
  55.             list.add(person);  
  56.         }  
  57.          return  list;  
  58.     }  
  59.      /**  
  60.      * @param args  
  61.      */   
  62.      public   static   void  main(String[] args) {  
  63.          // TODO Auto-generated method stub   
  64.          // JSON json = JSONSerializer.toJSON(JsonList.getList());   
  65.          // System.out.println(getString(new Person(23,"jack")));   
  66.            
  67.          // System.out.println(getListString(JsonList.getList()));   
  68.         String msgString =  "[{'age':1002,'name':'李四2'},{'age':1003,'name':'李四3'},{'age':1001,'name':'李四1'}]" ;  
  69.         List<Person> lPersons = getPersons(msgString);  
  70.          for (Person p:lPersons){  
  71.             System.out.println(p.toString());  
  72.         }  
  73.     }  
  74. }  

第二种方式:

Gson方式

[java]  view plaincopy
  1. import  java.util.ArrayList;  
  2. import  java.util.HashMap;  
  3. import  java.util.List;  
  4. import  java.util.Map;  
  5. import  com.android.domain.Person;  
  6. import  com.google.gson.Gson;  
  7. import  com.google.gson.reflect.TypeToken;  
  8.   
  9. public   class  GsonTools {  
  10.   
  11.      public  GsonTools() {  
  12.          // TODO Auto-generated constructor stub   
  13.     }  
  14.   
  15.      public   static  String createGsonString(Object object) {  
  16.         Gson gson =  new  Gson();  
  17.         String gsonString = gson.toJson(object);  
  18.          return  gsonString;  
  19.     }  
  20.   
  21.      public   static  <T> T changeGsonToBean(String gsonString, Class<T> cls) {  
  22.         Gson gson =  new  Gson();  
  23.         T t = gson.fromJson(gsonString, cls);  
  24.          return  t;  
  25.     }  
  26.   
  27.      public   static  <T> List<T> changeGsonToList(String gsonString, Class<T> cls) {  
  28.         Gson gson =  new  Gson();  
  29.         List<T> list_person = gson.fromJson(gsonString,  
  30.                  new  TypeToken<List<T>>() {  
  31.                 }.getType());  
  32.          return  list_person;  
  33.     }  
  34.   
  35.      public   static  List<Map<String, Object>> changeGsonToListMaps(String gsonString) {  
  36.         List<Map<String, Object>> list =  null ;  
  37.         Gson gson =  new  Gson();  
  38.         list = gson.fromJson(gsonString,  
  39.                  new  TypeToken<List<Map<String, Object>>>() {  
  40.                 }.getType());  
  41.          return  list;  
  42.     }  
  43.   
  44.      /**  
  45.      * @param args  
  46.      */   
  47.      public   static   void  main(String[] args) {  
  48.          // TODO Auto-generated method stub   
  49.          // Person person1 = new Person("张三1", 24, "北京1");   
  50.          // Person person2 = new Person("张三2", 23, "北京2");   
  51.          // List<Person> list = new ArrayList<Person>();   
  52.          // list.add(person1);   
  53.          // list.add(person2);   
  54.          //   
  55.          // String gsonString = createGsonString(list);   
  56.          // System.out.println(gsonString);   
  57.          // Gson gson = new Gson();   
  58.            
  59.          // System.out.println(list_person.toString());   
  60.          // Person pp = changeGsonToBean(gsonString,Person.class);   
  61.          // System.out.println(pp);   
  62.         List<Map<String, Object>> list =  new  ArrayList<Map<String, Object>>();  
  63.         Map<String, Object> map =  new  HashMap<String, Object>();  
  64.         map.put( "name" ,  "jack" );  
  65.         map.put( "age" ,  23 );  
  66.         Map<String, Object> map2 =  new  HashMap<String, Object>();  
  67.         map2.put( "name" ,  "rose" );  
  68.         map2.put( "age" ,  24 );  
  69.         list.add(map);  
  70.         list.add(map2);  
  71.         String gsonString = createGsonString(list);  
  72.         System.out.println(gsonString);  
  73.         List<Map<String, Object>> list2 = changeGsonToListMaps(gsonString);  
  74.         System.out.println(list2.toString());  
  75.     }  
  76.   
  77. }  

第三种方式:

fastJosn方式

[java]  view plaincopy
  1. import  java.util.ArrayList;  
  2. import  java.util.HashMap;  
  3. import  java.util.List;  
  4. import  java.util.Map;  
  5.   
  6. import  com.alibaba.fastjson.JSON;  
  7. import  com.alibaba.fastjson.TypeReference;  
  8. import  com.alibaba.fastjson.asm.Type;  
  9. import  com.alibaba.fastjson.util.TypeUtils;  
  10.   
  11. public   class  FastJsonTools {  
  12.   
  13.      public  FastJsonTools() {  
  14.          // TODO Auto-generated constructor stub   
  15.     }  
  16.   
  17.      public   static  String createJsonString(Object object) {  
  18.         String jsonString = JSON.toJSONString(object);  
  19.          return  jsonString;  
  20.     }  
  21.   
  22.      public   static  <T> T createJsonBean(String jsonString, Class<T> cls) {  
  23.         T t = JSON.parseObject(jsonString, cls);  
  24.          return  t;  
  25.     }  
  26.   
  27.      public   static  <T> List<T> createJsonToListBean(String jsonString,  
  28.             Class<T> cls) {  
  29.         List<T> list =  null ;  
  30.         list = JSON.parseArray(jsonString, cls);  
  31.          return  list;  
  32.     }  
  33.   
  34.      /**  
  35.      * @param jsonString  
  36.      * @return  
  37.      */   
  38.      public   static  List<Map<String, Object>> createJsonToListMap(  
  39.             String jsonString) {  
  40.         List<Map<String, Object>> list2 = JSON.parseObject(jsonString,  
  41.                  new  TypeReference<List<Map<String, Object>>>() {  
  42.                 });  
  43.          return  list2;  
  44.     }  
  45.   
  46.      /**  
  47.      * @param args  
  48.      */   
  49.      public   static   void  main(String[] args) {  
  50.          // TODO Auto-generated method stub   
  51.          // Person person1 = new Person("张三1", 24, "北京1");   
  52.          // Person person2 = new Person("张三2", 23, "北京2");   
  53.          // List<Person> list = new ArrayList<Person>();   
  54.          // list.add(person1);   
  55.          // list.add(person2);   
  56.         List<Map<String, Object>> list =  new  ArrayList<Map<String, Object>>();  
  57.         Map<String, Object> map =  new  HashMap<String, Object>();  
  58.         map.put( "name" ,  "jack" );  
  59.         map.put( "age" ,  23 );  
  60.         Map<String, Object> map2 =  new  HashMap<String, Object>();  
  61.         map2.put( "name" ,  "rose" );  
  62.         map2.put( "age" ,  24 );  
  63.         list.add(map);  
  64.         list.add(map2);  
  65.   
  66.         String jsonString = JSON.toJSONString(list);  
  67.         System.out.println(jsonString);  
  68.          // JSON.parseArray(arg0, arg1)   
  69.         List<Map<String, Object>> list2 = JSON.parseObject(jsonString,  
  70.                  new  TypeReference<List<Map<String, Object>>>() {  
  71.                 });  
  72.          // List<Person> lists = JSON.parseArray(arg0, arg1);   
  73.         System.out.println(list2.toString());  
  74.   
  75.     }  
  76.   
  77. }  

示例下载

示例下载

参考网址

json官网

google-gson

博客一

=======================================================================================================================

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

[java]  view plaincopy
  1. /**    
  2.          * 获取"数组形式"的JSON数据,    
  3.          * @param path  网页路径    
  4.          * @return  返回JSONArray    
  5.          * @throws Exception    
  6.           */     
  7.          public   static  String getJSONArray(String path)  throws  Exception {  
  8.                 String json =  null ;  
  9.                 URL url =  new  URL(path);  
  10.                  // 利用HttpURLConnection对象,我们可以从网络中获取网页数据.   
  11.                 HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  12.                  // 单位是毫秒,设置超时时间为5秒   
  13.                 conn.setConnectTimeout( 5  *  1000 );   
  14.                    
  15.                 conn.setRequestMethod( "GET" );   
  16.                  if  (conn.getResponseCode() ==  200 ) { // 判断请求码是否是200码,否则失败   
  17.                           
  18.                         InputStream is = conn.getInputStream();  // 获取输入流   
  19.                          byte [] data = readStream(is);  // 把输入流转换成字符数组   
  20.                         json =  new  String(data);  // 把字符数组转换成字符串   
  21.   
  22.                 }  
  23.                  return  json;  
  24.         }  

该方法返回解析到的json数据(例:[{"ID":11,"uid":67,"carNo":"豫A000V1"},{"ID":12,"uid":67,"carNo":"豫A9E592"},{"ID":16,"uid":67,"carNo":"豫A1E238"}]) 
然后就可以解析你想要的字段了

[java]  view plaincopy
  1. JSONArray jsonArray =  new  JSONArray(carIdJSON);  
  2.                                          for  ( int  i =  0 ; i < jsonArray.length(); i++) {  
  3.                                                 JSONObject jsonObject = jsonArray.getJSONObject(i);  
  4.     jsonObject.getString( "carNo" );  
  5.     jsonObject.getString( "ID" );  
  6.   
  7.                                         }  
有解析就有上传了(POST上传),json的上传要用NameValuePairs,大家可以查看jdk关于NameValuePairs的解释  
NameValuePairs只能传String类型的值  
  1. nameValuePairs.add(new BasicNameValuePair("xxx", xxx));
复制代码
可以上传很多字段(按需求上传就行了)  
下面就是上传的方法  
  1. //        1. 使用POST方式时,传递参数必须使用NameValuePair数组 
  2. //        2. 使用GET方式时,通过URL传递参数,注意写法 
  3. //        3. 通过setEntity方法来发送HTTP请求 
  4. //        4. 通过DefaultHttpClient 的 execute方法来获取HttpResponse 
  5. //        5. 通过getEntity()从Response中获取内容 
  6.          
  7.          
  8.         public static int httpPostData(String urlString,List<NameValuePair> nameValuePairs){ 
  9.                  
  10.                 HttpClient httpclient = new DefaultHttpClient(); 
  11.                 HttpPost httppost = new HttpPost(urlString); 
  12.                 try{ 
  13.                         httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
  14.                         HttpResponse response = httpclient.execute(httppost); 
  15.                         int statusCode = response.getStatusLine().getStatusCode(); 
  16.                         return statusCode; 
  17.                 }catch(Exception e){ 
  18.                         e.printStackTrace(); 
  19.                 } 
  20.                 return 0; 

  21.         }
复制代码
方法返回请求服务器,返回的响应参数  
200成功  
200服务器出错  
404服务器没响应(服务器有问题)

1.FastJson主要类

JSON

主要类,一般使用静态方法,序列化java bean序列化为json文本或者json字符串反序列化为相应对象

JSONObject

Json对象

JSONReader

JsonReader,可以在本地读取或者网络读取数据并可以反序列化

JSONWriter

JsonWriter,可以将对象序列化Json字符串,写入本地或者发送至服务

TypeReference

***重要, 类型引用在反序列化化很常用

2.常见应用   java代码
  1. public class JsonTest {

  2.   public static void main(String[] args) throws IOException, Exception {
  3.   /*
  4.   * 1.将指定的 JavaBean对象解析成Json字符串
  5.   */
  6.   Person p1 = new Person("zhangsan", 22, 1332117);
  7.   System.out.println(JSON.toJSONString(p1)); // 字段的get属性
  8.   /*
  9.   * 2.将封装了javaBean对象的集合解析成json字符串,并对该数据进行过滤
  10.   */
  11.   ValueFilter valueFilter = new ValueFilter() {
  12.   @Override
  13.   public Object process(Object source, String name, Object value) {
  14.   if (value.equals("lisi")) {
  15.   return "**敏感词汇**";
  16.   }
  17.   return value;
  18.   }
  19.   };
  20.   List list = new ArrayList();
  21.   list.add(new Person("lisi", 19, 159785));
  22.   list.add(new Person("wangwu", 10, 113123213));
  23.   list.add(new Person("zhaoliu", 29, 1444785));
  24.   System.out.println(JSON.toJSONString(list, valueFilter));
  25.   /*
  26.   * 3.将List>集合 转换为json字符串
  27.   */
  28.   List> list2 = new ArrayList>();
  29.   Map map1 = new HashMap();
  30.   map1.put("001", new Person("wangwu", 19, 159785));
  31.   map1.put("002", new Person("lisi", 19, 159785));
  32.   map1.put("003", new Person("lisi", 19, 159785));
  33.   Map map2 = new HashMap();
  34.   map2.put("001", new Person("zhaoliu", 19, 159785));
  35.   map2.put("002", new Person("lisi", 19, 159785));
  36.   map2.put("003", new Person("lisi", 19, 159785));
  37.   list2.add(map1);
  38.   list2.add(map2);
  39.   System.out.println(JSON.toJSONString(list2));
  40.   /*
  41.   * 4.将指定的字符串解析成 指定的javaBean对象(使用泛型)
  42.   */
  43.   Person p2 = JSON.parseObject(Person.getUtil(1), Person.class); // 
  44. 字段的set属性
  45.   /*
  46.   * 5.将指定的字符串解析成 封装了指定javaBean对象的集合
  47.   */
  48.   // 方法一:
  49.   List list1 = JSON.parseArray(Person.getUtil(2), Person.class);
  50.   // 方法二:
  51.   List list4 = JSON.parseObject(Person.getUtil(2), new 
  52. TypeReference>(){});
  53.   /*
  54.   * 6.将json字符串 解析成 List>集合 ,注意Type类型的定义
  55.   */
  56.   // 关键type类型
  57.   List> list3 = JSON.parseObject(Person.getUtil(3),new 
  58. TypeReference>>(){});
  59.   /*
  60.   * 7.将json字符串解析为 JsonObject对象, 由于该对象继承了map,可以得到键值对
  61.   */
  62.   JSONObject object = (JSONObject) JSON.parse(Person.getUtil(1));
  63.   System.out.println("name:" + object.getString("name"));
  64.   System.out.println("age:" + object.getIntValue("age"));
  65.   System.out.println("number:" + object.getIntValue("number"));
  66.   /*
  67.   * 8.name过滤器,只能对name进行更新,不管是否显示
  68.   */
  69.   NameFilter filter = new NameFilter() {
  70.   @Override
  71.   public String process(Object source, String name, Object value) {
  72.   // source是当前对象, name是key, value实在值
  73.   if ("age".equals(name)) {
  74.   return "AGE";
  75.   }
  76.   return name;
  77.   // {"age":22,"name":"zhangsan","number":1332117} //过滤前
  78.   // {"AGE":22,"name":"zhangsan","number":1332117} //过滤后
  79.   }
  80.   };
  81.   JSONSerializer jsonSerializer = new JSONSerializer();
  82.   jsonSerializer.getNameFilters().add(filter); // 通过增加一个过滤器,为name和值进行过滤
  83.   jsonSerializer.write(p1);
  84.   System.out.println(jsonSerializer.toString());
  85.   /*
  86.   * 9.属性过滤器PropertyFilter,满足要求的可以不做显示
  87.   */
  88.   PropertyFilter propertyFilter = new PropertyFilter() {
  89.   @Override
  90.   public boolean apply(Object source, String name, Object value) {
  91.   if ("age".equals(name)) {
  92.   return true;
  93.   }
  94.   return false;
  95.   }
  96.   };
  97.   JSONSerializer jsonSerializer2 = new JSONSerializer();
  98.   jsonSerializer2.getPropertyFilters().add(propertyFilter);
  99.   jsonSerializer2.write(list);
  100.   System.out.println(jsonSerializer2.toString());
  101.   /*
  102.   * 10.值过滤器ValueFilter,对满足要求的可以不做显示
  103.   */
  104.   ValueFilter valueFilter2 = new ValueFilter() {
  105.   @Override
  106.   public Object process(Object source, String name, Object value) {
  107.   if (value.equals(10)) {
  108.   return null;
  109.   }
  110.   return value;
  111.   }
  112.   };
  113.   JSONSerializer jsonSerializer3 = new JSONSerializer();
  114.   jsonSerializer3.getValueFilters().add(valueFilter2);
  115.   jsonSerializer3.write(list);
  116.   System.out.println(jsonSerializer3.toString());
  117.   /*
  118.   * 11.在本地路径下读取文件的json字符串信息,得到数据并赋值javaBean对象
  119.   */
  120.   JSONReader reader = new JSONReader(new FileReader("c:\\1.txt"));
  121.   // 注意type的使用
  122.   List list10 = reader.readObject(new 
  123. TypeReference>() {}.getType());
  124.   reader.close();
  125.   /*
  126.   * 12.将Object对象保存至本地路径中,保存为json字符串
  127.   */
  128.   JSONWriter writer = new JSONWriter(new FileWriter("c:\\2.txt"));
  129.   writer.writeObject(list10);
  130.   writer.close();
  131.   /*
  132.   * 13.在网络上获取json数据,并保存为对应的javaBean对象信息
  133.   */
  134.   List list11 = null;
  135.   URL url = new URL("http://192.168.117.114:8080/Test/My");
  136.   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  137.   conn.setRequestMethod("GET");
  138.   conn.setConnectTimeout(3000);
  139.   if (conn.getResponseCode() == 200) {
  140.   InputStream in = conn.getInputStream();
  141.   // 通过JsonReader类得到发出的输出流对象
  142.   JSONReader reader2 = new JSONReader(new InputStreamReader(in));
  143.   // 得到Object对象
  144.   list11 = reader2.readObject(new 
  145. TypeReference>(){}.getType());
  146.   }
  147.   for (Person p : list11) {
  148.   System.out.println(p);
  149.   }
  150.   /*
  151.   * 14.将客户端的javaBean对象,上传至服务器
  152.   */
  153.   byte[] bytes = JSON.toJSONBytes(list11);
  154.   URL url2 = new URL("http://192.168.117.114:8080/Test/My");
  155.   HttpURLConnection conn2 = (HttpURLConnection) url2.openConnection();
  156.   conn2.setRequestMethod("POST");
  157.   conn2.setConnectTimeout(3000);
  158.   conn2.setRequestProperty("content-length", 
  159. String.valueOf(bytes.length));
  160.   conn2.setRequestProperty("content-type","application/x-www-form-urlencoded");
  161.   conn2.setDoOutput(true);
  162.   OutputStream os = conn2.getOutputStream();
  163.   os.write(bytes, 0, bytes.length);
  164.   os.close();
  165.   if (conn2.getResponseCode() == 200) {
  166.   System.out.println("上传成功! ");
  167.   }
  168.   }
  169.   //22222222
  170.   // SerialFeature 字段详细用法
  171.   }
  172.   class Person {
  173.   public static String getUtil(int type) {
  174.   switch (type) {
  175.   case 1:
  176.   return new String(
  177.   "{\"ag\te\":22,\"name\":\"zhangsan\",\"number\":1332117}");
  178.   case 2:
  179.   return new String(
  180.   "[{\"age\":19,\"name\":\"lisi\",\"number\":159785},"
  181.   + "{\"age\":10,\"name\":\"wangwu\",\"number\":113123213},"
  182.   + "{\"age\":29,\"name\":\"zhaoliu\",\"number\":1444785}]");
  183.   case 3:
  184.   return new String(
  185.   "[{\"001\":{\"age\":19,\"name\":\"lisi\",\"number\":159785},"
  186.   + "\"002\":{\"age\":19,\"name\":\"wangwu\",\"number\":159785},"
  187.   + "\"003\":{\"age\":19,\"name\":\"lisi\",\"number\":159785}},"
  188.   + "{\"001\":{\"age\":23,\"name\":\"lisi\",\"number\":159785},"
  189.   + "\"002\":{\"age\":19,\"name\":\"lisi\",\"number\":159785},"
  190.   + "\"003\":{\"age\":19,\"name\":\"lisi\",\"number\":159785}}]");
  191.   }
  192.   return null;
  193.   }
  194.   private String name;
  195.   private int age;
  196.   private int number;
  197.   public Person() {
  198.   super();
  199.   }
  200.   public Person(String name, int age, int number) {
  201.   super();
  202.   this.name = name;
  203.   this.age = age;
  204.   this.number = number;
  205.   }
  206.   public String getName() {
  207.   return name;
  208.   }
  209.   public void setName(String name) {
  210.   this.name = name;
  211.   }
  212.   public int getAge() {
  213.   return age;
  214.   }
  215.   public void setAge(int age) {
  216.   this.age = age;
  217.   }
  218.   public int getNumber() {
  219.   return number;
  220.   }
  221.   public void setNumber(int number) {
  222.   this.number = number;
  223.   }
  224.   @Override
  225.   public String toString() {
  226.   return "Person [age=" + age + ", name=" + name + ", number=" + number + 
  227. "]";
  228.   }
  229.   }
复制代码
  3.SerialFeature的说明
  (1).SerialFeature类的定义
  java代码
  1. // 在枚举中SerializerFeature有如下部分定义

  2.   public enum SerializerFeature {
  3.   QuoteFieldNames,
  4.   UseSingleQuotes,
  5.   WriteMapNullValue,
  6.   WriteEnumUsingToString,
  7.   UseISO8601DateFormat,
  8.   SkipTransientField
  9.   }
复制代码
  (2).SerialFeature类的使用
  java代码
  1. Date date = new Date(1308841916550L);

  2.   // 缺省输出 System.out.println(JSON.toJSONString(date)); // 1308841916550
  3.   // 使用特性 UseISO8601DateFormat
  4.   System.out.println(JSON.toJSONString(date, 
  5. SerializerFeature.UseISO8601DateFormat));// "2011-06-23T23:11:56.550"
  6.   // 组合两个Feature(UseISO8601DateFormat和UseSingleQuotes)输出日期
  7.   SerializerFeature[] features = {SerializerFeature.UseISO8601DateFormat, 
  8. SerializerFeature.UseSingleQuotes };
  9.   System.out.println(JSON.toJSONString(date, features)); // 
  10. '2011-06-23T23:11:56.550'
复制代码



(3).详细说明

Featurs枚举值

缺省值

说明

QuoteFieldNames

true

序列化输出含引号的字段

UseSingleQuotes

false

使用单引号而不是双引号序列化

WriteMapNullValue

false

空值是否输出。大多数情况,值为null的属性输出是没有意义的,缺省这个特性是打开的。
{'id':123,birthday : null}    <---区别--->         {"id":123}

WriteEnumUsingToString

false

Enum输出为枚举值还是枚举下标

UseISO8601DateFormat

false

Date使用ISO8601格式输出日期

SkipTransientField

true

如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略

WriteNullListAsEmpty

false

list字段如果为null,输出为[],而不是null

WriteNullNumberAsZero

false

数值字段如果为null,输出为0,而不是null

WriteNullBooleanAsFalse

false

Boolean字段如果为null,输出为false,而不是null

WriteNullStringAsEmpty

false

字符类型字段如果为null,输出为"",而不是null

SortField

false

按字段名称排序后输出

WriteTabAsSpecial

false


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值