Java创建和解析Json数据⽅法——org.json包的使⽤(转)org.json包的使⽤
1.简介
⼯具包org.json.jar,是⼀个轻量级的,JAVA下的json构造和解析⼯具包,它还包含JSON与XML, HTTP headers, Cookies, CDL的转换。
这篇学习笔记,主要介绍常⽤的⼀些类如:JSONObject、JSONArray、JSONStringer等的⼀些⽤法;介绍了如何将Map、Collection、Java Bean等对象转化为json数据;介绍了如何使⽤org.json包解析json数据等。
2.常⽤类
3.构造json的⽰例⽤法
3.1 JSONObject.java
官⽹给出的JSONObject的构造函数如下:
⽐较常⽤就是传⼊String、map或者bean来构造JSON对象,代码例⼦如下:
⾸先定义⼀个java bean类:
[java]
1. package orgjson;
2.
3. /**
4. * 包含getter和setter的java bean类
5. * @author Zen9
6. */
7. public class Student {
8. private String name;
9. private String sex;
10. private int age;
11.
12. public String getName() {
13. return name;
14. }
15. public void setName(String name) {
16. this.name = name;
17. }
18. public String getSex() {
19. return sex;
20. }
21. public void setSex(String sex) {
22. this.sex = sex;
23. }
24. public int getAge() {
25. return age;
26. }
27. public void setAge(int age) {
28. this.age = age;
29. }
30. }
然后测试构造⽅法;也可以⽤put⽅法来向JSON对象中添加key/value对,当⽤put⽅法时候,value值可以是int、double、String、、boolean、collection、Map等等,但不可以为bean类型,代码如下:
[java]
1. package orgjson;
4. import java.util.List;
5. import java.util.Map;
6. import org.json.*;
7. public class JsonTest {
8. public static void constructorTest() {
9.
10. String jsonStr = "{'name':'JTZen9','age':21}";
11. JSONObject strJson = new JSONObject(jsonStr); // 传⼊字符串
12. System.out.println("构造参数为String类:" + strJson);
13.
14. Map<string object> map = new HashMap<string object>();
15. map.put("age", 21);
16. map.put("sex", "male");
17. map.put("name", "JTZen9");
18. JSONObject mapJson = new JSONObject(map); // 传⼊Map类型
19. System.out.println("构造参数为Map类:" + mapJson);
20.
21. Student student = new Student();
22. student.setAge(21);
23. student.setName("JTZen9");
24. student.setSex("male");
25. JSONObject beanJson = new JSONObject(student); // 传⼊Bean类型
26. System.out.println("构造参数为Bean类:" + beanJson);
27. }
28.
29. public static void putMethodTest() {
30.
31. JSONObject jsonObject1 = new JSONObject();
32. jsonObject1.put("bookName", "JTZen9");
33. jsonObject1.put("age", 21);
34. System.out.println(jsonObject1);
35.
36. JSONObject jsonObject2 = new JSONObject();
37. List<object> list = new ArrayList</object><object>();
38. for (int i = 1; i < 3; i++) {
39. Map<string object=""> map = new HashMap<string object="">();
40. map.put("title", "java程序设计第" + i + "版");
41. map.put("price", i*20);
42. list.add(map);
43. }
44. jsonObject2.put("book", list);
45. System.out.println(jsonObject2);
46.
47. Student student = new Student();
48. student.setAge(21);
49. student.setName("JTZen9");
50. student.setSex("male");
51. jsonObject2 = new JSONObject(student);
52. JSONObject jsonObject3 = new JSONObject();
53. jsonObject3.put("people", jsonObject2); //不可以直接传bean类对象put("people",student)
54. System.out.println(jsonObject3);
55. }
56.
57. public static void main(String[] args) throws Exception {
58. constructorTest();
59. System.out.println("---------------------------------------------------------");
60. putMethodTest();
61. }
62. }
输出结果:
3.2 JSONArray.java
1.构造函数
这⾥⽤Collection、String和Object型的array作为参数,给出例⼦如下:
[java]
1. package orgjson;
2. import java.util.ArrayList;
3. import java.util.HashMap;
4. import java.util.List;
5. import java.util.Map;
6. import org.json.*;
7. public class JsonArrayTest {
8. public static void constructorTest() {
9.
10. String jsonStr = "[{'name':'JTZen9','age':21}]";
11. JSONArray strJson = new JSONArray(jsonStr); // 传⼊字符串
12. System.out.println("构造参数为String类:" + strJson);
13.
14. List<Object> list = new ArrayList<Object>();
15. for (int i = 1; i < 3; i++) {
16. Map<string object=""> map = new HashMap<string object="">();
17. map.put("title", "java程序设计第" + i + "版");
18. map.put("price", i*20);
19. list.add(map);
20. }
21. JSONArray mapJson = new JSONArray(list); // 传⼊Collection类型
22. System.out.println("构造参数为Collection类:" + mapJson);
23.
24. int[] numlist = new int[10];
25. for (int i = 0; i < numlist.length; i++) {
26. numlist[i] = i;
27. }
28. JSONArray arrayJson = new JSONArray(numlist); // 传⼊Array类型,实例1
29. System.out.println(arrayJson);
30.
31. Student[] student = {new Student(),new Student()};
32. student[0].setAge(21);
33. student[0].setName("JTZen9");
34. student[0].setSex("male");
35. student[1].setAge(21);
36. student[1].setName("heiheihei");
37. student[1].setSex("female");
38. JSONArray beanJson = new JSONArray(student); // 传⼊Array类型,实例2
39. System.out.println("构造参数为Array类:" + beanJson);
40. }
41.
42. public static void main(String[] args) {
java arraylist用法43. constructorTest();
44. }
45. }
输出结果如下:
2.put⽅法创建
put⽅法中可以直接将int、double、Collection、Map等加进去,也可以添加下标来指定添加的位置:put(int index, java.util.Map value),使⽤put⽅法构造的JSON数组,如果传⼊的是数组,都会⾃动加⼀对中括号[ ],那么出来的结果就会有两层的中括号[ ],代码例⼦如下:[java]
1. package orgjson;
2. import java.util.HashMap;
3. import java.util.Map;
4. import org.json.*;
5. public class JSONArrayTest {
6. public static void putMethodTest() {
7. JSONArray jsonArray1 = new JSONArray();
8. jsonArray1.put("JTZen9");
11. System.out.println(jsonArray1);
12.
13. JSONArray jsonArray2 = new JSONArray();
14. Map<string object=""> map = new HashMap<string object="">();
15. map.put("title", "java程序设计第2版");
16. map.put("price", 20);
17. jsonArray2.put(map); //传⼊⼀个map
18. System.out.println("传⼊⼀个Map:" + jsonArray2);
19. map.clear();
20. map.put("title", "java程序设计第3版");
21. map.put("price", 30);
22. jsonArray2.put(map); //没有下标的直接在结果后⾯添加
23. System.out.println("没有指定下标:" + jsonArray2);
24. map.clear();
25. map.put("title", "java程序设计第1版");
26. map.put("price", 10);
27. jsonArray2.put(0,map); //使⽤下标可以添加到⾃定义的位置
28. System.out.println("添加到第⼀个位置:" + jsonArray2);
29.
30. Student[] student = { new Student(), new Student() };
31. student[0].setAge(21);
32. student[0].setName("JTZen9");
33. student[0].setSex("male");
34. student[1].setAge(21);
35. student[1].setName("heiheihei");
36. student[1].setSex("female");
37. JSONArray jsonArray3 = new JSONArray();
38. jsonArray3.put(student);
39. System.out.println("注意输出结果:" + jsonArray3);
40.
41. }
42.
43. public static void main(String[] args) {
44. putMethodTest();
45. }
46. }
输出的结果如下:
3.3 JSONStringer.java & JSONWriter.java
①JSONWriter可以⽤来构建⼀个JSON格式的⽂本,并转换成String,可以写⼊⽂件,便于传输和存储。只有⼀个构造函数:JSONWriter(java.io.Writer w)
②常⽤⼏个函数和说明:
③JSONStringer是JSONWriter的⼦类;⽤法跟JSONWriter⼏乎⼀样,区别是可以直接new JSONStringer()创建对象,不⽤传⼊构造参数。JSONStringer也可以通过object().key().value().key().val
ue().endObject()进⾏构造;
下⾯是简单的写⼊代码例⼦:(可以尝试写⼊更复杂数据)
[java]
1. package orgjson;
2. import java.io.PrintWriter;
3. import java.util.HashMap;
4. import java.util.Map;
5. import org.json.*;
6. public class JSONWriterStringerTest {
7. public static void JSONStringerTest() throws Exception {
8.
9. PrintWriter writer = new PrintWriter("");
10. JSONWriter jsonWriter = new JSONWriter(writer);
11. jsonWriter.object().key("name").value("JTZen9").key("age").value(21).key("sex").value("male").endObject();
12. writer.flush();
13. writer.close();
14.
15. Map<string object=""> map1 = new HashMap<string object="">();
18. map1.put("name", "jtzen9");
19. Map<string object=""> map2 = new HashMap<string object="">();
20. map2.put("age", 21);
21. map2.put("sex", "female");
22. map2.put("name", "heiheihei");
23. JSONStringer jsonStringer = new JSONStringer();
24. jsonStringer.array().value(map1).value(map2).endArray();
25. System.out.println(jsonStringer);
26. }
27.
28. public static void main(String[] args) throws Exception {
29. JSONStringerTest();
30. }
31. }
输出结果,上⾯为⽂件,下⾯为控制台:
3.4 JSONTokener.java
JSONTokener读取包含json格式数据的⽂件,然后可以将JSONTokener对象作为参数来构造JSONObject或JSONArray,然后再进⾏相应的解析。
以上⾯的为例,简单代码⽰例如下:
[java]
1. package orgjson;
2. import java.io.File;
3. import java.io.FileReader;
4. import org.json.*;
5. public class JSONTokenerTest {
6.
7. public static void readJsonFile() throws Exception{
8. JSONTokener jsonTokener = new JSONTokener(new FileReader(new File("")));
9. JSONObject jsonObject = new JSONObject(jsonTokener);
10. System.out.println(jsonObject);
11. System.out.println("姓名:" + String("name"));
12. System.out.println("年龄:" + Int("age"));
13. }
14.
15. public static void main(String[] args) throws Exception {
16. readJsonFile();
17. }
18. }
输出结果如下:
4.解析例⼦
这⾥给出⼀个相对复杂的json数据:
<
[java]
1. [
2. {
3. "institute":{
4. "name":"Software Institute",
5. "grade":[
6. {
7. "name":"freshman",
8. "class":[
9. {
10. "no.":1,
11. "students":61
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论