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. new Gson();  
27. //创建一个学生对象          
28.         Student originStudent = getStudent();  
29.           
30. //将学生对象转换成JSON串  
31.         String reponse = gson.toJson(originStudent);  
32.           
33. //将JSON串再还原成一个学生对象  
34. class);  
35.   
36.         mTextView.setText(reponse);  
37.     }  
38.   
39. public Student getStudent() {  
40. new Subject();  
41. "语文");  
42. "张老师");  
43.           
44. new Subject();  
45. "数学");  
46. "黄老师");    
47.           
48. new Subject();  
49. "英文");  
50. "林老师");    
51.           
52. new ArrayList<Subject>();  
53.         subjects.add(sub1);  
54.         subjects.add(sub2);  
55.         subjects.add(sub3);  
56.           
57. new Student();  
58. "杨辉");  
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. }