Gson-解析json之利器
下面通過一個表格來了解一下,GSON目前的發展狀況
下圖是,使用GSON轉換時報的一個異常。
Java程式碼
-
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1
- at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
- at com.google.gson.Gson.fromJson(Gson.java:803)
- at com.google.gson.Gson.fromJson(Gson.java:768)
- at com.google.gson.Gson.fromJson(Gson.java:717)
-
at com.google.gson.Gson.fromJson(Gson.java:689
- at com.demoone.UseGson.testOneBeanFromJSON(UseGson.java:54)
- at com.demoone.UseGson.main(UseGson.java:89)
- Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 //注意這句話跟陣列集合有關
-
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374
- at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165)
- ... 6 more
下面貼出,筆者的測試原始碼,注意上述異常,在程式碼的註釋中已經指出問題原因
Java程式碼
- package com.demoone;
- import java.util.ArrayList;
- import java.util.List;
- import com.entity.Person;
- import com.google.gson.Gson;
- import com.google.gson.reflect.*;
- /***
- *
- * 使用gson
- * 進行序列化,反序列化的操作
- * json
- *
- * **/
- public class UseGson {
- static Gson g=new Gson();
- /**
- *
- * 由集合型別的實體類
- * 轉換成Json型別
- *
- * **/
- public static void testToJSON(){
- List<Person> list=new ArrayList<>();
- for(int i=0;i<2;i++){
- Person p=new Person(i, "散仙"+i, "北京市"+i, "[email protected]", 500.0);
- list.add(p);
- }
- String json=g.toJson(list);
- System.out.println(json);
- }
- /**
- * 由json轉換為實體類
- *
- * */
- public static void testOneBeanFromJSON(){
- /**
- * 轉換一個Java Bean的時候
- * 記住不能使用[],只有在使用集合的時候才可以使用
- * 如上圖貼的那個異常就是由此原因造成的,另外
- * 格式要規範,中間不能出現空格字元
- *
- * **/
- String jsonBean="[{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"[email protected]\",\"money\":500.0}]";
- Person p=g.fromJson(jsonBean, Person.class);
- System.out.println(p);
- }
- /**
- * 由json轉換為實體類集合
- *
- * */
- public static void testListBeanFromJSON(){
- /**
- * 轉換一個集合 的實體Bean
- * 注意前面加上[]方括號,代表一個數組
- * **/
- String jsonBeanList="[{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"[email protected]\",\"money\":500.0},{\"id\":1,\"name\":\"散仙1\",\"address\":\"北京市1\",\"email\":\"[email protected]\",\"money\":500.0}]";
- List<Person> lists=g.fromJson(jsonBeanList,new TypeToken<List<Person>>(){}.getType());
- System.out.println("反序列之後");
- for(Person pp:lists){
- System.out.println(pp);
- }
- }
- public static void main(String[] args) {
- testListBeanFromJSON();//測試集合反序列化
- testOneBeanFromJSON();//測試單個實體類反序列化
- //testToJSON();//測試序列化
- }
- }
執行結果:
Java程式碼
- testListBeanFromJSON() 方法:
- 反序列之後
- 編號:0 名字:散仙0 地址:北京市0 E-mail:54152541@qq.com 錢:500.0
- 編號:1 名字:散仙1 地址:北京市1 E-mail:54152541@qq.com 錢:500.0
- testOneBeanFromJSON() 方法:
- 編號:0 名字:散仙0 地址:北京市0 E-mail:54152541@qq.com 錢:500.0
實體類Person:
Java程式碼
- package com.entity;
- /**
- * 實體類
- *
- *
- * **/
- public class Person {
- private int id;
- private String name;
- private String address;
- private String email;
- private double money;
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- return "編號:"+id+" 名字:"+name+" 地址:"+address+" E-mail:"+email+" 錢:"+money;
- }
- public Person() {
- // TODO Auto-generated constructor stub
- }
- public Person(int id, String name, String address, String email,
- double money) {
- super();
- this.id = id;
- this.name = name;
- this.address = address;
- this.email = email;
- this.money = money;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public double getMoney() {
- return money;
- }
- public void setMoney(double money) {
- this.money = money;
- }
- }
體會到了GSON的強大了吧,GSON還可以使用註解簡化,在這裡筆者就不給出程式碼了,有興趣的讀者可以自己研究一下
包含jar,javadoc,source的壓縮包,google-gson-2.2.2-release.zip下載:http://download.csdn.net/detail/u010122002/7729949
相關推薦
Gson-解析json之利器
Gson(又稱Google Gson)是Google公司釋出的一個開放原始碼的Java庫,主要用途為序列化Java物件為JSON字串,或反序列化JSON字串成Java物件。GSON核心jar包不到1M,非常精簡,但提供的功能無疑是非常強大的,如果使用JDK自帶的JSON解析
Android之使用GSON解析JSON資料
GSON簡介: GSON是Google提供的用來在Java物件和JSON資料之間進行對映的Java類庫。GSON可以很容易的將一串JSON資料轉換為一個Java物件,或是將 一個Java物件轉換為相應的JSON資料。 使用GSON解析JSON資料的基本
android開發之 Gson 解析json陣列
為了紀念兩天解決的一個問題。 剛剛接觸到android的volley 框架,使用jsonarrayrequest的時候,得到jsonarray 問高手說可以用Gson 來解析於是開始了兩天的鑽研之路。 首先我的資料是這樣的 然後,你需要自己寫一個類,對應後臺資料的一個
Android網路之資料解析----使用Google Gson解析Json資料
<span style="font-size:18px;">一、Json資料的介紹
Gson解析json
down googl -s span info 解析 實例 pack targe 以下是我依據Gson對json做的一些解析案例,如今我來說說Gson是如何進行Json解析的。 新建一個project: WeatherDemo,導入Gson包。Gson庫導入完畢之後就開
json-lib解析json之二維JSONArray
我們 方式 數據 利用 2.2.3 .cn ima 解析json 有一種 在接口測試中,不管是接口的請求報文還是接口的響應報文,數據全部使用json,在工作中避免不了去解析響應報文以獲取某個鍵的值,解析josn有兩種方式,一種是利用jackson,還有一種就是利用json-
Android Gson解析json工具類封裝
pac spa google lis object sonar andro on() div package com.springSecurity.gson; import java.util.ArrayList; import java.util.List
Gson解析json數組
ken log rom new linked listt new t getjson string String getjson = (String) msg.obj;Type listType = new TypeToken<LinkedList<bean&g
json數據格式和gson解析json的應用
shu from ... gin color OS inter list json數據格式 首先json的數據格式分為三種:數組、對象、數組對象混合 數組格式: {"asd","qwe","ffe"} 對象格式: {"a":1,"b":2,"c":3} 註意寫代碼中要加入
用gson解析json的問題
過去 成長 回老家 自然 把他 生命 電視 快餐 愛的 <p> 今天下了一天的雨,心情也像這天氣一樣,壓抑、沈悶。 以前每次在,屋子裏看著外面下雨,心理都特別的溫暖。小時候,每次下雨了,媽媽都會給我找出一件厚厚的衣服讓我穿上,然後我總會趴在炕上美美的看著電視。
GSON 解析 JSON
GSON JSON 介紹 Gson 下載 Gson 解析 和 格式化 Gson 格式化 Gson 解析 解析assets目錄下的Json檔案 ## Json 介紹 Json 全稱
Gson解析json資料
簡介: Json資料是類似xml型別的資料轉化格式但是它的傳輸速率遠遠高於xml的解析速率。 這裡簡單的對用gson解析json格式的資料,為什麼說是簡單的介紹呢,因為博主有更簡單的解析方式後期會進行推出或者掃描頭像進 行私聊(公眾號)。 進行整合: 這裡按照a
gson解析json字串
String retJson = HttpRequestUtil.sendGet1(url, auth, null); JsonParser parser = new JsonParser(); JsonObject ret = parser.parse(retJson).getAsJ
解析JSON之資料格式
JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。JSON採用完全獨立於語言的文字格式,這些特性使JSON成為理想的資料交換語言。易於人閱讀和編寫,同時也易於機器解析和生成。 基礎結構 JSON建構於兩種結構: 1.“名稱/值”對的集合(A col
android Gson解析JSON資料中動態未知欄位key的方法
有時在解析json資料中的欄位key是動態可變的時候,由於Gson是使用靜態註解的方式來設定實體物件的,因此我們很難直接對返回的型別來判斷。但Gson在解析過程中如果不知道解析的欄位,就會將所有變數儲存在一個Map中,我們只要例項化這個map就能動態地取出key和value了。先給出一段js
shell解析json之jq工具
工具下載地址及各版本的安裝方式,我常用的是把工具包下載下來直接用,不安裝: https://stedolan.github.io/jq/manual/#example1 test.json { "sys": { "valid": "true",
Android-Gson解析JSON資料(JSON物件/JSON陣列)
上一篇部落格,Android-解析JSON資料(JSON物件/JSON陣列),介紹了使用 org.json.JSONArray;/org.json.JSONObject; 來解析JSON資料; Google Android 還提供來另外一種方式來解析JSON資料,那就是Gson;
快速上手Gson解析json
Gson(google封裝的)的一款解析json的工具類 匯入jar包。jar包可以通過Maven倉庫下載 https://mvnrepository.com/artifact/com.google.code.gson/gson json例子: 直
Gson解析json時出現Expected a string but was BEGIN_ARRAY異常,由此發現Gson和FastJson區別
結果:[{"catalog":"環境搭建","article":[{"read":1,"column":9,"id":2,"title":"IntelliJIDEA環境搭建","slug":"static/kotlin_article/0_1.html"},{"read":1,"column":9,"id":
使用volley請求資料,Gson解析json的時候出現中文亂碼問題
首先來看一下我出現的問題! 遇到的過問題的人,或上網也可以查的到,仔細看,我列印的Log日誌就是解析的資料,出現亂碼了,那說明這個jsonString是獲取到的資料,看後的兩個引數,第一個是.data這個意思應該就資料,而後面的就是轉碼格式,看原始碼就會知道,這個應該是預設