<摘录>Gson对Java嵌套对象和JSON字符串之间的转换

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性。近几年来已经和XML一样成为C/S架构中广泛采用的数据格式。有关JSON的更多知识,请参考以下内容:http://json.org/json-zh.html

在服务器和客户端之间使用JSON数据格式进行通信,经常会涉及到JAVA对象和JSON字符串之间的转换。通常,我们可以使用一些JSON解析工具,例如:Gson,FastJson等。当然,我们也可以手动解析,只是会比较繁琐。

下面通过一个实例来介绍使用Gson来进行JAVA嵌套对象和JSON字符串之间的相互转换。

MainActivity

  1. package com.example.jsonsample;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.app.Activity;  
  6. import android.os.Bundle;  
  7. import android.view.Menu;  
  8. import android.widget.TextView;  
  9.   
  10. import com.example.jsonsample.data.Student;  
  11. import com.example.jsonsample.data.Subject;  
  12. import com.google.gson.Gson;  
  13.   
  14. public class MainActivity extends Activity {  
  15.   
  16.     private TextView mTextView;  
  17.       
  18.       
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.activity_main);  
  23.           
  24.         mTextView = (TextView)findViewById(R.id.MyTextView);  
  25.           
  26.         Gson gson = new Gson();  
  27.         //创建一个学生对象          
  28.         Student originStudent = getStudent();  
  29.           
  30.         //将学生对象转换成JSON串  
  31.         String reponse = gson.toJson(originStudent);  
  32.           
  33.         //将JSON串再还原成一个学生对象  
  34.         Student newstudent = gson.fromJson(reponse, Student.class);  
  35.   
  36.         mTextView.setText(reponse);  
  37.     }  
  38.   
  39.     public Student getStudent() {  
  40.         Subject sub1 = new Subject();  
  41.         sub1.setSubject_name("语文");  
  42.         sub1.setTeacher_name("张老师");  
  43.           
  44.         Subject sub2 = new Subject();  
  45.         sub2.setSubject_name("数学");  
  46.         sub2.setTeacher_name("黄老师");    
  47.           
  48.         Subject sub3 = new Subject();  
  49.         sub3.setSubject_name("英文");  
  50.         sub3.setTeacher_name("林老师");    
  51.           
  52.         ArrayList<Subject> subjects = new ArrayList<Subject>();  
  53.         subjects.add(sub1);  
  54.         subjects.add(sub2);  
  55.         subjects.add(sub3);  
  56.           
  57.         Student student = new Student();  
  58.         student.setName("杨辉");  
  59.         student.setSubjects(subjects);  
  60.   
  61.         return student;  
  62.     }  
  63.       
  64.       
  65.       
  66.   
  67.     @Override  
  68.     public boolean onCreateOptionsMenu(Menu menu) {  
  69.         getMenuInflater().inflate(R.menu.activity_main, menu);  
  70.         return true;  
  71.     }  
  72. }  


Student

  1. package com.example.jsonsample.data;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.ArrayList;  
  5. /** 
  6.  * 学生类,包含学生名字和学科列表 
  7.  *  
  8.  * @author yanghui<yanghui1986527@gmail.com> 
  9.  */  
  10. public class Student implements Serializable {  
  11.   
  12.     /** 
  13.      * Serializable 
  14.      */  
  15.     private static final long serialVersionUID = -2689979321936117293L;  
  16.       
  17.     private String name;  
  18.       
  19.     private ArrayList<Subject> subjects;  
  20.   
  21.     /** 
  22.      *  
  23.      * @return name 学生名字 
  24.      */  
  25.     public String getName() {  
  26.         return name;  
  27.     }  
  28.   
  29.     /** 
  30.      *  
  31.      * @param name 学生名字 
  32.      */  
  33.     public void setName(String name) {  
  34.         this.name = name;  
  35.     }  
  36.   
  37.     /** 
  38.      *  
  39.      * @return subjects 学科列表 
  40.      */  
  41.     public ArrayList<Subject> getSubjects() {  
  42.         return subjects;  
  43.     }  
  44.   
  45.     /** 
  46.      *  
  47.      * @param subjects 学科列表 
  48.      */  
  49.     public void setSubjects(ArrayList<Subject> subjects) {  
  50.         this.subjects = subjects;  
  51.     }  
  52.   
  53.       
  54. }  


Subject

  1. package com.example.jsonsample.data;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. /** 
  6.  * 学科类,包含学科名字和学科老师名字 
  7.  *  
  8.  * @author yanghui<yanghui1986527@gmail.com> 
  9.  */  
  10. public class Subject implements Serializable{  
  11.   
  12.     /** 
  13.      * serialVersionUID 
  14.      */  
  15.     private static final long serialVersionUID = -2574980011831897251L;  
  16.   
  17.     private String subject_name;  
  18.     private String teacher_name;  
  19.   
  20.     /** 
  21.      *  
  22.      * @return  subject_name 学科名称 
  23.      */  
  24.     public String getSubject_name() {  
  25.         return subject_name;  
  26.     }  
  27.   
  28.     /** 
  29.      * @param  subject_name 学科名称 
  30.      */  
  31.     public void setSubject_name(String subject_name) {  
  32.         this.subject_name = subject_name;  
  33.     }  
  34.   
  35.     /** 
  36.      * 
  37.      * @return  teacher_name 学科老师的名字 
  38.      */  
  39.     public String getTeacher_name() {  
  40.         return teacher_name;  
  41.     }  
  42.   
  43.     /** 
  44.      *  
  45.      * @param teacher_name 学科老师的名字 
  46.      */  
  47.     public void setTeacher_name(String teacher_name) {  
  48.         this.teacher_name = teacher_name;  
  49.     }  
  50. }  

图片预览:

原文地址:https://www.cnblogs.com/hummersofdie/p/4287700.html