詳解Gson使用(一)簡單對象轉化

來源:互聯網
上載者:User

標籤:

JSON是一種輕量級的資料交換格式。 易於人閱讀和編寫,同時也易於機器解析和產生(一般用於提升網路傳輸速率)。

在之前我寫過一篇文章,《Android解析json資料》

http://blog.csdn.net/a249900679/article/details/51195505

介紹了json和用JSONObject、JSONArray解析json資料的方法,接下來幾篇文章將會介紹解析json資料的更好的方法:使用Gson解析。

 

Gson是Google推出的用來解析json資料以及將對象轉換成json資料的架構。可以很方便地實現json資料與對象的相互轉換,還可以自訂需要序列化或還原序列化的欄位。

 

使用Gson需要先匯入jar,我這裡用到的是gson-2.3.1.jar

項目和jar:

Github:https://github.com/smileysx/GsonTest

Oschina:https://git.oschina.net/ysx_xx/GsonText



詳解Gson使用(一)簡單對象轉化

http://blog.csdn.net/a249900679/article/details/51385913

詳解Gson使用(二)帶泛型的List轉化

http://blog.csdn.net/a249900679/article/details/51386028

詳解Gson使用(三)使用註解

http://blog.csdn.net/a249900679/article/details/51386509

詳解Gson使用(四)Map對象轉化
http://blog.csdn.net/a249900679/article/details/51386660
詳解Gson使用(五)實現百度翻譯功能

http://blog.csdn.net/a249900679/article/details/51386727


其中gson-2.3.1.jar在項目lib目錄下

 

下面先來介紹簡單對象的轉換:

注意:以下所有實體類的變數名要跟json資料中的key相同

1.普通json資料對象實體類:

public class ToJsonBeanOne {private int id;private String name;private int age;public ToJsonBeanOne(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public String getName() {return name;}public int getAge() {return age;}public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {String resultString = "";resultString += "id:" + id + "\nname:" + name + "\nage:" + age + "\n";return resultString;}}

 

可以看出來,上面對象中三個資料都是String類型,這是最簡單的。

看看如何把該對象序列化:

public class ToJsonTest extends Activity {private TextView show;private Button start;private Gson gson;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();}private void initData() {gson = new Gson();show = (TextView) findViewById(R.id.showtext);start = (Button) findViewById(R.id.send);start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showData();}});}private void showData() {String resultString = "";resultString = one() + "\n\n";show.setText(resultString);}private String one() {//建立對象ToJsonBeanOne toJsonBeanOne = new ToJsonBeanOne(1, "小熊", 21);//將對象轉換為json資料return gson.toJson(toJsonBeanOne);}}

結果為:



接下來看看如何把json資料轉換為該對象:

public class FromJsonTest extends Activity {/** * 顯示資料的textview */private TextView show;/** * 按鈕 */private Button start;/** * gson */private Gson gson;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();}private void initData() {gson = new Gson();show = (TextView) findViewById(R.id.showtext);start = (Button) findViewById(R.id.send);start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showData();}});}private void showData() {String showString = "";showString += one();show.setText(showString);}private String one() {//這裡建立個對象,是為了得到json資料,實際中json資料可能是由網路請求得到等ToJsonBeanOne toJsonBeanOne = new ToJsonBeanOne(1, "小熊", 21);String jsonString = gson.toJson(toJsonBeanOne);//將json資料轉換為對象ToJsonBeanOne beanOne = gson.fromJson(jsonString, ToJsonBeanOne.class);String showString = "";showString += "json:" + jsonString + "\n解析結果為:\n" + beanOne.toString();showString += "----------------------\n";return showString;}}

結果為:



2.帶對象的對象實體類:

public class ToJsonBeanTwo {private String school;private String classroom;private ToJsonBeanOne toJsonBeanOne;public ToJsonBeanTwo(String school, String classroom,ToJsonBeanOne toJsonBeanOne) {super();this.school = school;this.classroom = classroom;this.toJsonBeanOne = toJsonBeanOne;}public String getSchool() {return school;}public String getClassroom() {return classroom;}public ToJsonBeanOne getToJsonBeanOne() {return toJsonBeanOne;}public void setSchool(String school) {this.school = school;}public void setClassroom(String classroom) {this.classroom = classroom;}public void setToJsonBeanOne(ToJsonBeanOne toJsonBeanOne) {this.toJsonBeanOne = toJsonBeanOne;}@Overridepublic String toString() {String resultString = "";resultString += "school:" + school + "\nclassroom:" + classroom+ "\ntoJsonBeanOne:\nid:" + toJsonBeanOne.getId() + "\nname:"+ toJsonBeanOne.getName() + "\nage:" + toJsonBeanOne.getAge()+ "\n";return resultString;}}

可以看出該對象中不僅有String類型資料,還有ToJsonBeanOne對象資料。

看看如何把該對象序列化:

public class ToJsonTest extends Activity {private TextView show;private Button start;private Gson gson;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();}private void initData() {gson = new Gson();show = (TextView) findViewById(R.id.showtext);start = (Button) findViewById(R.id.send);start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showData();}});}private void showData() {String resultString = "";resultString += three() + "\n\n";show.setText(resultString);}private String three() {ToJsonBeanTwo toJsonBeanTwo = new ToJsonBeanTwo("華軟", "軟工五班",new ToJsonBeanOne(1, "小熊", 21));return gson.toJson(toJsonBeanTwo);}}

結果為:



接下來看看如何把json資料轉換為該對象:

public class FromJsonTest extends Activity {/** * 顯示資料的textview */private TextView show;/** * 按鈕 */private Button start;/** * gson */private Gson gson;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();}private void initData() {gson = new Gson();show = (TextView) findViewById(R.id.showtext);start = (Button) findViewById(R.id.send);start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showData();}});}private void showData() {String showString = "";showString += three();show.setText(showString);}private String three() {ToJsonBeanTwo toJsonBeanTwo = new ToJsonBeanTwo("華軟", "軟工五班",new ToJsonBeanOne(1, "小熊", 21));String jsonString = gson.toJson(toJsonBeanTwo);ToJsonBeanTwo beanTwo = gson.fromJson(jsonString, ToJsonBeanTwo.class);String showString = "";showString += "json:" + jsonString + "\n解析後的資料:\n" + beanTwo.toString();showString += "----------------------\n";return showString;}}

 

結果為:



3.既帶對象又帶List資料的對象(相當與json資料中有數組)實體類:

public class ToJsonBeanThree {private String number;private ToJsonBeanTwo toJsonBeanTwo;private List<Book> books;public ToJsonBeanThree(String number, ToJsonBeanTwo toJsonBeanTwo,List<Book> books) {super();this.number = number;this.toJsonBeanTwo = toJsonBeanTwo;this.books = books;}public ToJsonBeanTwo getToJsonBeanTwo() {return toJsonBeanTwo;}public List<Book> getBooks() {return books;}public void setToJsonBeanTwo(ToJsonBeanTwo toJsonBeanTwo) {this.toJsonBeanTwo = toJsonBeanTwo;}public void setBooks(List<Book> books) {this.books = books;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}@Overridepublic String toString() {String resultString = "";resultString += "number:" + number + "\n";ToJsonBeanOne toJsonBeanOne = toJsonBeanTwo.getToJsonBeanOne();resultString += "toJsonBeanTwo:\nschool:" + toJsonBeanTwo.getSchool()+ "\nclassroom:" + toJsonBeanTwo.getClassroom() + "\n";resultString += "toJsonBeanOne:\nid:" + toJsonBeanOne.getId()+ "\nname:" + toJsonBeanOne.getName() + "\nage:"+ toJsonBeanOne.getAge() + "\n";resultString += "books:\n";for (int i = 0; i < books.size(); ++i) {resultString += "bookName:" + books.get(i).getBookName()+ "\nprice:" + books.get(i).getPrice() + "\n";}return resultString;}/** *  * @ClassName: Book * @Description: 內部類 * @author smile * @date 2016年5月12日 上午12:23:42 *  */public static class Book {private String bookName;private float price;public Book(String bookName, float price) {super();this.bookName = bookName;this.price = price;}public String getBookName() {return bookName;}public float getPrice() {return price;}public void setBookName(String bookName) {this.bookName = bookName;}public void setPrice(float price) {this.price = price;}}}

可以看出該對象裡不僅有String類型,還有ToJsonBeanTwo物件類型,還有List<Book>類型,Book對象我寫成內部類,如果有多個類共用則寫成外部類,這裡要注意:寫成內部類要寫為靜態內部類,不然解析會出錯。

看看如何把該對象序列化:

public class ToJsonTest extends Activity {private TextView show;private Button start;private Gson gson;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();}private void initData() {gson = new Gson();show = (TextView) findViewById(R.id.showtext);start = (Button) findViewById(R.id.send);start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showData();}});}private void showData() {String resultString = "";resultString += five() + "\n\n";show.setText(resultString);}private String five() {ToJsonBeanTwo toJsonBeanTwo = new ToJsonBeanTwo("華軟", "軟工五班",new ToJsonBeanOne(1, "小熊", 21));List<Book> books = new ArrayList<Book>();for (int i = 1; i < 5; ++i) {books.add(new Book("第" + i + "本書", 25f * i));}ToJsonBeanThree toJsonBeanThree = new ToJsonBeanThree("1",toJsonBeanTwo, books);return gson.toJson(toJsonBeanThree);}}

結果為:


可以看出對象中List資料books轉換成json資料變為數組

 

接下來看看如何把json資料轉換為該對象:

public class FromJsonTest extends Activity {/** * 顯示資料的textview */private TextView show;/** * 按鈕 */private Button start;/** * gson */private Gson gson;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();}private void initData() {gson = new Gson();show = (TextView) findViewById(R.id.showtext);start = (Button) findViewById(R.id.send);start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showData();}});}private void showData() {String showString = "";showString += five();show.setText(showString);}private String five() {ToJsonBeanTwo toJsonBeanTwo = new ToJsonBeanTwo("華軟", "軟工五班",new ToJsonBeanOne(1, "小熊", 21));List<Book> books = new ArrayList<Book>();for (int i = 1; i < 5; ++i) {books.add(new Book("第" + i + "本書", 25f * i));}ToJsonBeanThree toJsonBeanThree = new ToJsonBeanThree("1",toJsonBeanTwo, books);String jsonString = gson.toJson(toJsonBeanThree);ToJsonBeanThree beanThree = gson.fromJson(jsonString,ToJsonBeanThree.class);String showString = "";showString += "json:" + jsonString + "\n解析後的資料:\n"+ beanThree.toString();showString += "----------------------\n";return showString;}}

結果為:




詳解Gson使用(一)簡單對象轉化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.