1. 程式人生 > >Jackson和Gson的使用

Jackson和Gson的使用

傑克遜使用:

轉自:HTTP://hi.baidu.com/woodcock1017/item/53c3761099ac74071894ec99

傑克遜使用備忘

傑克遜主要使用ObjectMapper物件來進行序列化以及反序列化操作。

使用傑克遜可以毫無壓力的將複雜物件進行完全序列化,也可以將各種型別的物件反序列化

以下程式碼均省略異常處理

普通物件

序列化Order order物件:

ObjectMapper mapper = new ObjectMapper();

Writer strWriter = new StringWriter();

mapper.writeValue(strWriter,順序);

String json = strWriter.toString();

反序列化:

Order order = mapper.readValue(json,Order.class);

連結串列,地圖等

序列化List <Order> orderList:

ObjectMapper mapper = new ObjectMapper();

Writer strWriter = new StringWriter();

mapper.writeValue(strWriter,orderList);

String json = strWriter.toString();

 反序列化:

需要用到TypeReference

List <Order> orderList = mapper.readValue(json,new TypeReference <List <Order >>(){});  

如果反序列化為名單<LinkedHashMap的<字串,字串>>,則直接

List orderList = mapper.readValue(json,List.class);  

解析某個欄位

JsonNode node = mapper.readTree(json);

String name = node.get(“name”);

GSON的使用:

轉自:HTTP://www.iteye.com/topic/1131510

Gson(又稱Google Gson)是Google公司釋出的一個開原始碼的Java庫,主要用途為序列化Java物件為JSON字串,或反序列化JSON字串串成Java物件.GSON核心jar包不到1M,非常精簡,但提供的功能無疑是非常強大的,如果使用JDK自帶的JSON解析API,使用起來相對比較繁瑣一點,而且程式碼量較多。

下面通過一個表格來了解一下,GSON目前的發展狀況


 

下圖是,使用GSON轉換時報的一個異常。

的Java程式碼  收藏程式碼

  1. 執行緒“main”中的異常   com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:預期的BEGIN_OBJECT,但是BEGIN_ARRAY在第  1  行第2 列   
  2.     在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:176 )  
  3.     在com.google.gson.Gson.fromJson(Gson.java:803 )  
  4.     在com.google.gson.Gson.fromJson(Gson.java:768 )  
  5.     在com.google.gson.Gson.fromJson(Gson.java:717 )  
  6.     在com.google.gson.Gson.fromJson(Gson.java:689 )  
  7.     在com.demoone.UseGson.testOneBeanFromJSON(UseGson.java:54 )  
  8.     在com.demoone.UseGson.main(UseGson.java:89 )  
  9. 引起:java.lang.IllegalStateException:預期的BEGIN_OBJECT,但是BEGIN_ARRAY在第  1  行第2 列  //注意這句話跟陣列集合有關     
  10.     在com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374 )  
  11.     在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:165 )  
  12.     ...  6  更多  


下面貼出,筆者的測試原始碼,注意上述異常,在程式碼的註釋中已經指出問題原因

的Java程式碼  收藏程式碼

  1. package  com.demoone;  
  2. import  java.util.ArrayList;  
  3. import  java.util.List;  
  4. 進口 com.entity.Person;  
  5. import  com.google.gson.Gson;  
  6. import  com.google.gson.reflect。*;  
  7. / *** 
  8.  *  
  9.  *使用gson 
  10.  *進行序列化,反序列化的操作 
  11.  * json 
  12.  *  
  13.  * ** /  
  14. 公共 UseGson {   
  15.  靜態 Gson g = new  Gson();  
  16.  / ** 
  17.   *  
  18.   *由集合型別的實體類 
  19.   *轉換成Json型別 
  20.   *  
  21.   * ** /  
  22.     public static void  testToJSON(){    
  23.         List <Person> list = new  ArrayList <>();  
  24.         for int  i = 0 ; i < 2 ; i ++){  
  25.          Person p = new  Person(i,  “散仙” + i,  “北京市” + i,  [email protected],  500.0 );  
  26.             list.add(P);  
  27.         }  
  28.         字串json = g.toJson(list);  
  29.         的System.out.println(JSON);  
  30.     }  
  31.     / ** 
  32.      *由json轉換為實體類 
  33.      *  
  34.      * * /  
  35.     public static void  testOneBeanFromJSON(){    
  36.         / ** 
  37.          *轉換一個Java Bean的時候 
  38.          *記住不能使用[],只有在使用集合的時候才可以使用  
  39.          *如上圖貼的那個異常就是由此原因造成的,另外 
  40.          *格式要規範,中間不能出現空格字元 
  41.          *  
  42.          * ** /  
  43.         String jsonBean = “[{\”id \“:0,\”name \“:\”散仙0 \“,\”地址\“:\”北京市0 \“,\”email \“:\” [email protected] \“,\”money \“:500.0}]” ;  
  44.          人員P = g.fromJson(jsonBean,人。);  
  45.          的System.out.println(P);  
  46.     }  
  47.     / ** 
  48.      *由json轉換為實體類集合 
  49.      *  
  50.      * * /  
  51.     public static void  testListBeanFromJSON(){    
  52.          / ** 
  53.           *轉換一個集合的實體Bean 
  54.           *注意前面加上[]方括號,代表一個數組 
  55.           * ** /  
  56.          String jsonBeanList = “[{\”id \“:0,\”name \“:\”散仙0 \“,\”地址\“:\”北京市0 \“,\”email \“:\” [email protected] \ “\ ”錢\“:500.0},{\ ”ID \“:1,\ ”名稱\“:\ ”散仙1 \“,\ ”地址\“:\”北京市1 \“,\”email \“:\”[email protected] \“,\”money \“:500.0}]” ;  
  57.          List <Person> lists = g.fromJson(jsonBeanList,new    TypeToken <List <Person >>(){}。getType());  
  58.          System.out.println(“反序列之後” );  
  59.          for (Person pp:lists){  
  60.              的System.out.println(PP);  
  61.          }  
  62.     }  
  63.     public static void  main(String [] args){    
  64.          testListBeanFromJSON(); //測試集合反序列化  
  65.          testOneBeanFromJSON(); //測試單個實體類反序列化  
  66.          // testToJSON(); //測試序列化  
  67.     }  
  68. }  


執行結果:

的Java程式碼  收藏程式碼

  1. testListBeanFromJSON()方法:  
  2. 反序列之後  
  3. 編號:0   名字:散仙0    地址:北京市0    電子郵件:54152541 @qq .com錢:500.0  
  4. 編號:1   名字:散仙1    地址:北京市1    電子郵件:54152541 @qq .com錢:500.0  
  5. testOneBeanFromJSON()方法:  
  6. 編號:0   名字:散仙0    地址:北京市0    電子郵件:54152541 @qq .com錢:500.0  




實體類人:

的Java程式碼  收藏程式碼

  1.  comcomity;  
  2. / ** 
  3.  *實體類 
  4.  *  
  5.  *  
  6.  * ** /  
  7. public class  Person {   
  8.     private int  id;   
  9.     私人 字串名稱;  
  10.     私人 字串地址;  
  11.     私人 String電子郵件;  
  12.     私人 錢;   
  13.     @覆蓋  
  14.     public  String toString(){  
  15.         // TODO自動生成的方法存根  
  16.         返回“編號:” + id + “名字:” + name + “地址:” + address + “電子郵件:” + email + “錢:” + money;    
  17.     }  
  18.     public  Person(){  
  19.         // TODO自動生成的建構函式存根  
  20.     }  
  21.     公共 人(int  id,字串名稱,字串地址,字串電子郵件,  
  22.              錢){  
  23.         super ();  
  24.         這個.id = id;  
  25.         這個.name = name;  
  26.         這個.address = address;  
  27.         .email =電子郵件;  
  28.         這個.money =錢;  
  29.     }  
  30.     public int  getId(){   
  31.         返回 ID;  
  32.     }  
  33.     public void  setId(int  id){   
  34.         這個.id = id;  
  35.     }  
  36.     public  String getName(){  
  37.         返回 名稱;  
  38.     }  
  39.     public void  setName(String name){   
  40.         這個.name = name;  
  41.     }  
  42.     public  String getAddress(){  
  43.         返回 地址;  
  44.     }  
  45.     public void  setAddress(String address){   
  46.         這個.address = address;  
  47.     }  
  48.     public  String getEmail(){  
  49.         回覆 郵件;  
  50.     }  
  51.     public void  setEmail(String email){   
  52.         .email =電子郵件;  
  53.     }  
  54.     public double  getMoney(){   
  55.         回報 金錢;  
  56.     }  
  57.     public void  setMoney(double  money){   
  58.         這個.money =錢;  
  59.     }  
  60. }  

轉載:

相關推薦

JacksonGson的使用

傑克遜使用: 轉自:HTTP://hi.baidu.com/woodcock1017/item/53c3761099ac74071894ec99 傑克遜使用備忘 傑克遜主要使用ObjectMapper物件來進行序列化以及反序列化操作。 使用傑克遜可以毫無壓力的將複

Android中Json資料解析(二)--使用GsonJacksonFastJson解析Json資料

/**-----------------Jackson資料解析----------------------------*/ private static ObjectMapper mObjectMapper; private static JsonGenerator mJsonGenerator; pr

利用SharePrefrenceGson實現實體類的保存與獲取

getclass 類繼承 brush gets static 實現 highlight model htm 實現需要Gson獲者其他能將實體類轉換成json的jar包 接下來是主要方法: 保存實體類 public static void putClass(ModelBa

json數據格式gson解析json的應用

shu from ... gin color OS inter list json數據格式 首先json的數據格式分為三種:數組、對象、數組對象混合 數組格式: {"asd","qwe","ffe"} 對象格式: {"a":1,"b":2,"c":3} 註意寫代碼中要加入

Android以JSONOjectGSON兩種方式解析json

length pre ray oid 字符 CA clas img name json文件如下: 將獲取到的json數據轉化為String形式 OkHttpClient client = new OkHttpClient(); R

jacksonhttpclient

webservice->xml jackson->json jackson 1.1 Java->Json 1.1.1 ObjectMap 1.1.2 JsonGenerator 1.1.3 @JsonIgnore hibernate中一對多、多對多雙向關聯

Json之 jacksongson

Json之 jackson,gson等 (spring web使用了jackson作為預設實現) 常用有三種json解析jackson、fastjson、gson。 jackson jackson主要使用ObjectMapper物件來進行序列化以及反序列化操作。 使用jackso

Android的jacksonhttpcliet

從第三方專案中拿資料通常有兩種方式(根據資料互動的格式來定) xml->webservice/httpClient json->httpClient java java java android java ios java 微信 jackson 1.1 Java-&

jacksongson的簡單使用

文章目錄 jackson Gson jackson package com.zhidianfan.pig.yd.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fast

jacksonhttpcliet

介面 1.1 OOP interface 1.2 url json 如何給前端開發人提供介面 2.1 提供地址/引數/返回值(json) 2.2 ***.jar 核心內容(Android呼叫Java,完成查詢單個以及修改的功能) 1、準備一個Ja

各個JSON技術的比較(JacksonGson,Fastjson)的對比

一 、各個JSON技術的簡介和優劣 1.json-lib json-lib最開始的也是應用最廣泛的json解析工具,json-lib 不好的地方確實是依賴於很多第三方包, 包括commons-beanutils.jar,commons-collections-3

Androidstudio jacksonhttpcliet

webservice->xml jackson->json 從第三方專案中拿資料通常有兩種方式(根據資料互動的格式來定) xml->webservice/httpClient json->httpClient java java java

三級快取Gson解析的介面

Util //單例 private static NetUtil instance; //圖片記憶體快取 private LruCache<String, Bitmap> cache; //HashMap&l

fastJson (ObjectMapper) Gson 物件的初步使用呢(一)

首先,兩者都是json字串的轉換工具,只不過是效能上、使用上不同 首先使用fastJson //定義一個物件 Student student = new Student("張三","123456","男",20);

HanderHttpURLConnectionGson解析網路資料設定listView

try { URL url=new URL("http://172.17.8.100/movieApi/movie/v1/findHotMovieList?page=1&count=10"); HttpURLCo

jsonjava物件的相互轉換(json-libGson的使用)

在java開發中時常會遇到json與java物件轉換的情況,比如說一般介面呼叫返回的都是json格式的,我們要取出來用就得把它解析成我們想要的格式,有時候我們傳遞引數又需要把引數封裝成json。這兩天

fastJsonGson的比較

FastJson和Gson的簡單比較 先用gson寫一個util工具來感受下. public class JsonUtil { private static Gson gson = new GsonBuilder().setDateFormat

Android應用開發------------Json工具類(fastJsonGson的兩種工具類)

json一般是Android中比較常用的與伺服器互動的資料形式。我們常用的架包來解析json字串有fastjson和gson 分別寫了兩個工具類: fastJson import java.util.ArrayList; import java.util.List;

json資料結構gson的比較

資料結構:Object,Array 物件Object:使用花括號{}包含的鍵值對,key必須是string基本型別,value可以是資料結構和基本型別 陣列Array:使用中括號[]包含元素,使用逗號,分割元素 基本型別:String,number,true,false,null   js

json數據結構gson的比較

映射 類型 服務端 null 比較 數組array ava round 進行 數據結構:Object,Array 對象Object:使用花括號{}包含的鍵值對,key必須是string基本類型,value可以是數據結構和基本類型 數組Array:使用中括號[]包含元素,使用