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. }