详解Gson使用(一)简单对象转化

感谢原文主,内容很详细,很不错

原文链接


JSON是一种轻量级的数据交换格式。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)

在之前我写过一篇文章,《Android解析json数据

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

介绍了json和用JSONObjectJSONArray解析json数据的方法,接下来几篇文章将会介绍解析json数据的更好的方法:使用Gson解析。

 

GsonGoogle推出的用来解析json数据以及将对象转换成json数据的框架。可以很方便地实现json数据与对象的相互转换,还可以自定义需要序列化或反序列化的字段。

 

使用Gson需要先导入jar,我这里用到的是gson-2.3.1.jar

项目和 jar 下载地址:

Githubhttps://github.com/smileysx/GsonTest

Oschinahttps://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数据对象实体类:

  1. public class ToJsonBeanOne {  
  2.     private int id;  
  3.     private String name;  
  4.     private int age;  
  5.   
  6.     public ToJsonBeanOne(int id, String name, int age) {  
  7.         super();  
  8.         this.id = id;  
  9.         this.name = name;  
  10.         this.age = age;  
  11.     }  
  12.   
  13.     public int getId() {  
  14.         return id;  
  15.     }  
  16.   
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.   
  21.     public int getAge() {  
  22.         return age;  
  23.     }  
  24.   
  25.     public void setId(int id) {  
  26.         this.id = id;  
  27.     }  
  28.   
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.   
  33.     public void setAge(int age) {  
  34.         this.age = age;  
  35.     }  
  36.   
  37.     @Override  
  38.     public String toString() {  
  39.         String resultString = "";  
  40.         resultString += "id:" + id + "\nname:" + name + "\nage:" + age + "\n";  
  41.   
  42.         return resultString;  
  43.     }  
  44. }  

 

可以看出来,上面对象中三个数据都是String类型,这是最简单的。

看看如何把该对象序列化:

  1. public class ToJsonTest extends Activity {  
  2.   
  3.     private TextView show;  
  4.     private Button start;  
  5.     private Gson gson;  
  6.   
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.   
  12.         initData();  
  13.     }  
  14.   
  15.     private void initData() {  
  16.   
  17.         gson = new Gson();  
  18.         show = (TextView) findViewById(R.id.showtext);  
  19.         start = (Button) findViewById(R.id.send);  
  20.         start.setOnClickListener(new OnClickListener() {  
  21.   
  22.             @Override  
  23.             public void onClick(View v) {  
  24.                 showData();  
  25.             }  
  26.         });  
  27.     }  
  28.   
  29.     private void showData() {  
  30.   
  31.         String resultString = "";  
  32.   
  33.         resultString = one() + "\n\n";  
  34.   
  35.         show.setText(resultString);  
  36.     }  
  37.   
  38.     private String one() {  
  39.         //创建对象  
  40.         ToJsonBeanOne toJsonBeanOne = new ToJsonBeanOne(1"小熊"21);  
  41.         //将对象转换为json数据  
  42.         return gson.toJson(toJsonBeanOne);  
  43.     }  
  44. }  

结果为:



接下来看看如何把json数据转换为该对象:

  1. public class FromJsonTest extends Activity {  
  2.   
  3.     /** 
  4.      * 显示数据的textview 
  5.      */  
  6.     private TextView show;  
  7.     /** 
  8.      * 按钮 
  9.      */  
  10.     private Button start;  
  11.     /** 
  12.      * gson 
  13.      */  
  14.     private Gson gson;  
  15.   
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.activity_main);  
  20.   
  21.         initData();  
  22.     }  
  23.   
  24.     private void initData() {  
  25.   
  26.         gson = new Gson();  
  27.         show = (TextView) findViewById(R.id.showtext);  
  28.         start = (Button) findViewById(R.id.send);  
  29.         start.setOnClickListener(new OnClickListener() {  
  30.   
  31.             @Override  
  32.             public void onClick(View v) {  
  33.                 showData();  
  34.             }  
  35.         });  
  36.   
  37.     }  
  38.   
  39.     private void showData() {  
  40.         String showString = "";  
  41.   
  42.         showString += one();  
  43.   
  44.         show.setText(showString);  
  45.   
  46.     }  
  47.   
  48.     private String one() {  
  49.         //这里创建个对象,是为了得到json数据,实际中json数据可能是由网络请求得到等  
  50.         ToJsonBeanOne toJsonBeanOne = new ToJsonBeanOne(1"小熊"21);  
  51.         String jsonString = gson.toJson(toJsonBeanOne);  
  52.       
  53.         //将json数据转换为对象  
  54.         ToJsonBeanOne beanOne = gson.fromJson(jsonString, ToJsonBeanOne.class);  
  55.   
  56.         String showString = "";  
  57.         showString += "json:" + jsonString + "\n解析结果为:\n" + beanOne.toString();  
  58.   
  59.         showString += "----------------------\n";  
  60.         return showString;  
  61.     }  
  62. }  

结果为:



2.带对象的对象实体类:

  1. public class ToJsonBeanTwo {  
  2.     private String school;  
  3.     private String classroom;  
  4.     private ToJsonBeanOne toJsonBeanOne;  
  5.   
  6.     public ToJsonBeanTwo(String school, String classroom,  
  7.             ToJsonBeanOne toJsonBeanOne) {  
  8.         super();  
  9.         this.school = school;  
  10.         this.classroom = classroom;  
  11.         this.toJsonBeanOne = toJsonBeanOne;  
  12.     }  
  13.   
  14.     public String getSchool() {  
  15.         return school;  
  16.     }  
  17.   
  18.     public String getClassroom() {  
  19.         return classroom;  
  20.     }  
  21.   
  22.     public ToJsonBeanOne getToJsonBeanOne() {  
  23.         return toJsonBeanOne;  
  24.     }  
  25.   
  26.     public void setSchool(String school) {  
  27.         this.school = school;  
  28.     }  
  29.   
  30.     public void setClassroom(String classroom) {  
  31.         this.classroom = classroom;  
  32.     }  
  33.   
  34.     public void setToJsonBeanOne(ToJsonBeanOne toJsonBeanOne) {  
  35.         this.toJsonBeanOne = toJsonBeanOne;  
  36.     }  
  37.   
  38.     @Override  
  39.     public String toString() {  
  40.         String resultString = "";  
  41.         resultString += "school:" + school + "\nclassroom:" + classroom  
  42.                 + "\ntoJsonBeanOne:\nid:" + toJsonBeanOne.getId() + "\nname:"  
  43.                 + toJsonBeanOne.getName() + "\nage:" + toJsonBeanOne.getAge()  
  44.                 + "\n";  
  45.         return resultString;  
  46.     }  
  47. }  

可以看出该对象中不仅有String类型数据,还有ToJsonBeanOne对象数据。

看看如何把该对象序列化:

  1. public class ToJsonTest extends Activity {  
  2.   
  3.     private TextView show;  
  4.     private Button start;  
  5.     private Gson gson;  
  6.   
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.   
  12.         initData();  
  13.     }  
  14.   
  15.     private void initData() {  
  16.   
  17.         gson = new Gson();  
  18.         show = (TextView) findViewById(R.id.showtext);  
  19.         start = (Button) findViewById(R.id.send);  
  20.         start.setOnClickListener(new OnClickListener() {  
  21.   
  22.             @Override  
  23.             public void onClick(View v) {  
  24.                 showData();  
  25.             }  
  26.         });  
  27.     }  
  28.   
  29.     private void showData() {  
  30.   
  31.         String resultString = "";  
  32.   
  33.         resultString += three() + "\n\n";  
  34.   
  35.         show.setText(resultString);  
  36.     }  
  37.   
  38.     private String three() {  
  39.   
  40.         ToJsonBeanTwo toJsonBeanTwo = new ToJsonBeanTwo("华软""软工五班",  
  41.                 new ToJsonBeanOne(1"小熊"21));  
  42.   
  43.         return gson.toJson(toJsonBeanTwo);  
  44.     }  
  45. }  

结果为:



接下来看看如何把json数据转换为该对象:

  1. public class FromJsonTest extends Activity {  
  2.   
  3.     /** 
  4.      * 显示数据的textview 
  5.      */  
  6.     private TextView show;  
  7.     /** 
  8.      * 按钮 
  9.      */  
  10.     private Button start;  
  11.     /** 
  12.      * gson 
  13.      */  
  14.     private Gson gson;  
  15.   
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.activity_main);  
  20.   
  21.         initData();  
  22.     }  
  23.   
  24.     private void initData() {  
  25.   
  26.         gson = new Gson();  
  27.         show = (TextView) findViewById(R.id.showtext);  
  28.         start = (Button) findViewById(R.id.send);  
  29.         start.setOnClickListener(new OnClickListener() {  
  30.   
  31.             @Override  
  32.             public void onClick(View v) {  
  33.                 showData();  
  34.             }  
  35.         });  
  36.   
  37.     }  
  38.   
  39.     private void showData() {  
  40.         String showString = "";  
  41.   
  42.         showString += three();  
  43.   
  44.         show.setText(showString);  
  45.   
  46.     }  
  47.   
  48.     private String three() {  
  49.   
  50.         ToJsonBeanTwo toJsonBeanTwo = new ToJsonBeanTwo("华软""软工五班",  
  51.                 new ToJsonBeanOne(1"小熊"21));  
  52.         String jsonString = gson.toJson(toJsonBeanTwo);  
  53.   
  54.         ToJsonBeanTwo beanTwo = gson.fromJson(jsonString, ToJsonBeanTwo.class);  
  55.   
  56.         String showString = "";  
  57.         showString += "json:" + jsonString + "\n解析后的数据:\n" + beanTwo.toString();  
  58.   
  59.         showString += "----------------------\n";  
  60.   
  61.         return showString;  
  62.     }  
  63. }  

 

结果为:



3.既带对象又带List数据的对象(相当与json数据中有数组)实体类:

  1. public class ToJsonBeanThree {  
  2.     private String number;  
  3.     private ToJsonBeanTwo toJsonBeanTwo;  
  4.     private List<Book> books;  
  5.   
  6.     public ToJsonBeanThree(String number, ToJsonBeanTwo toJsonBeanTwo,  
  7.             List<Book> books) {  
  8.         super();  
  9.         this.number = number;  
  10.         this.toJsonBeanTwo = toJsonBeanTwo;  
  11.         this.books = books;  
  12.     }  
  13.   
  14.     public ToJsonBeanTwo getToJsonBeanTwo() {  
  15.         return toJsonBeanTwo;  
  16.     }  
  17.   
  18.     public List<Book> getBooks() {  
  19.         return books;  
  20.     }  
  21.   
  22.     public void setToJsonBeanTwo(ToJsonBeanTwo toJsonBeanTwo) {  
  23.         this.toJsonBeanTwo = toJsonBeanTwo;  
  24.     }  
  25.   
  26.     public void setBooks(List<Book> books) {  
  27.         this.books = books;  
  28.     }  
  29.   
  30.     public String getNumber() {  
  31.         return number;  
  32.     }  
  33.   
  34.     public void setNumber(String number) {  
  35.         this.number = number;  
  36.     }  
  37.   
  38.     @Override  
  39.     public String toString() {  
  40.   
  41.         String resultString = "";  
  42.         resultString += "number:" + number + "\n";  
  43.         ToJsonBeanOne toJsonBeanOne = toJsonBeanTwo.getToJsonBeanOne();  
  44.         resultString += "toJsonBeanTwo:\nschool:" + toJsonBeanTwo.getSchool()  
  45.                 + "\nclassroom:" + toJsonBeanTwo.getClassroom() + "\n";  
  46.         resultString += "toJsonBeanOne:\nid:" + toJsonBeanOne.getId()  
  47.                 + "\nname:" + toJsonBeanOne.getName() + "\nage:"  
  48.                 + toJsonBeanOne.getAge() + "\n";  
  49.         resultString += "books:\n";  
  50.   
  51.         for (int i = 0; i < books.size(); ++i) {  
  52.             resultString += "bookName:" + books.get(i).getBookName()  
  53.                     + "\nprice:" + books.get(i).getPrice() + "\n";  
  54.         }  
  55.   
  56.         return resultString;  
  57.     }  
  58.   
  59.     /** 
  60.      *  
  61.      * @ClassName: Book 
  62.      * @Description: 内部类 
  63.      * @author smile 
  64.      * @date 2016年5月12日 上午12:23:42 
  65.      *  
  66.      */  
  67.     public static class Book {  
  68.         private String bookName;  
  69.         private float price;  
  70.   
  71.         public Book(String bookName, float price) {  
  72.             super();  
  73.             this.bookName = bookName;  
  74.             this.price = price;  
  75.         }  
  76.   
  77.         public String getBookName() {  
  78.             return bookName;  
  79.         }  
  80.   
  81.         public float getPrice() {  
  82.             return price;  
  83.         }  
  84.   
  85.         public void setBookName(String bookName) {  
  86.             this.bookName = bookName;  
  87.         }  
  88.   
  89.         public void setPrice(float price) {  
  90.             this.price = price;  
  91.         }  
  92.   
  93.     }  
  94. }  

可以看出该对象里不仅有String类型,还有ToJsonBeanTwo对象类型,还有List<Book>类型,Book对象我写成内部类,如果有多个类共用则写成外部类,这里要注意:写成内部类要写为静态内部类,不然解析会出错。

看看如何把该对象序列化:

  1. public class ToJsonTest extends Activity {  
  2.   
  3.     private TextView show;  
  4.     private Button start;  
  5.     private Gson gson;  
  6.   
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.   
  12.         initData();  
  13.     }  
  14.   
  15.     private void initData() {  
  16.   
  17.         gson = new Gson();  
  18.         show = (TextView) findViewById(R.id.showtext);  
  19.         start = (Button) findViewById(R.id.send);  
  20.         start.setOnClickListener(new OnClickListener() {  
  21.   
  22.             @Override  
  23.             public void onClick(View v) {  
  24.                 showData();  
  25.             }  
  26.         });  
  27.     }  
  28.   
  29.     private void showData() {  
  30.   
  31.         String resultString = "";  
  32.   
  33.         resultString += five() + "\n\n";  
  34.   
  35.         show.setText(resultString);  
  36.     }  
  37.   
  38.     private String five() {  
  39.   
  40.         ToJsonBeanTwo toJsonBeanTwo = new ToJsonBeanTwo("华软""软工五班",  
  41.                 new ToJsonBeanOne(1"小熊"21));  
  42.         List<Book> books = new ArrayList<Book>();  
  43.         for (int i = 1; i < 5; ++i) {  
  44.             books.add(new Book("第" + i + "本书", 25f * i));  
  45.         }  
  46.         ToJsonBeanThree toJsonBeanThree = new ToJsonBeanThree("1",  
  47.                 toJsonBeanTwo, books);  
  48.   
  49.         return gson.toJson(toJsonBeanThree);  
  50.     }  
  51. }  

结果为:


可以看出对象中List数据books转换成json数据变为数组

 

接下来看看如何把json数据转换为该对象:

  1. public class FromJsonTest extends Activity {  
  2.   
  3.     /** 
  4.      * 显示数据的textview 
  5.      */  
  6.     private TextView show;  
  7.     /** 
  8.      * 按钮 
  9.      */  
  10.     private Button start;  
  11.     /** 
  12.      * gson 
  13.      */  
  14.     private Gson gson;  
  15.   
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.activity_main);  
  20.   
  21.         initData();  
  22.     }  
  23.   
  24.     private void initData() {  
  25.   
  26.         gson = new Gson();  
  27.         show = (TextView) findViewById(R.id.showtext);  
  28.         start = (Button) findViewById(R.id.send);  
  29.         start.setOnClickListener(new OnClickListener() {  
  30.   
  31.             @Override  
  32.             public void onClick(View v) {  
  33.                 showData();  
  34.             }  
  35.         });  
  36.   
  37.     }  
  38.   
  39.     private void showData() {  
  40.         String showString = "";  
  41.           
  42.         showString += five();  
  43.   
  44.         show.setText(showString);  
  45.   
  46.     }  
  47.       
  48.     private String five() {  
  49.   
  50.         ToJsonBeanTwo toJsonBeanTwo = new ToJsonBeanTwo("华软""软工五班",  
  51.                 new ToJsonBeanOne(1"小熊"21));  
  52.         List<Book> books = new ArrayList<Book>();  
  53.         for (int i = 1; i < 5; ++i) {  
  54.             books.add(new Book("第" + i + "本书", 25f * i));  
  55.         }  
  56.         ToJsonBeanThree toJsonBeanThree = new ToJsonBeanThree("1",  
  57.                 toJsonBeanTwo, books);  
  58.   
  59.         String jsonString = gson.toJson(toJsonBeanThree);  
  60.   
  61.         ToJsonBeanThree beanThree = gson.fromJson(jsonString,  
  62.                 ToJsonBeanThree.class);  
  63.   
  64.         String showString = "";  
  65.         showString += "json:" + jsonString + "\n解析后的数据:\n"  
  66.                 + beanThree.toString();  
  67.   
  68.         showString += "----------------------\n";  
  69.         return showString;  
  70.     }  
  71. }  

结果为:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值