导图社区 JSON编程概念知识点学习笔记总结
JSON编程概念知识点学习笔记总结,包括json对象、json数组、json解析、json-lib.jar、JSON案例与练习等内容。
编辑于2022-11-04 11:03:57 广东JSON编程概念知识点学习笔记总结
基本概念
JavaScript Object Notation符号 基于JavaScript语言的轻量级的数据交换格式; 即:用来传输数据的一种格式.
json对象
由名值对组成的一对大括号
name:value
{name1:value1,name2:value2......} 键值对的顺序无所谓
json数组
[value1,value2,value3,...]
json解析
当json字符串以"{"开始,用JSONObject解析
当json字符串以"["开始,用JSONArray解析
json-lib.jar
JSON案例与练习
json1
Test01.java简单键值对的解析; object中存放键值对
假设整个字符串表示一个Perosn对象
String json = "{name:'zhangsan',age:20}";
JSONObject obj= new JSONObject(json); Person person= new Person(); person.setName(obj.getString("name")); person.setAge(obj.getInt("age"));
Test02.java对象的解析; object中存放object
person键的值是一个Perosn对象
String json="{person:{name:'zhangsan',age:20}}";
JSONObject obj1 = new JSONObject(json); 要获取的值是JSON对象时,用getJSONObject(key) JSONObject obj2 = obj1.getJSONObject("person"); Person person = new Person(); person.setName(obj2.getString("name")); person.setAge(obj2.getInt("age")); System.out.println(person);
Test03:获取JSONObject所有的key
Iterator keys();//JSONObject类中的方法
String json = "{key1:value1,key2:value2,key3:value3}"
json2(练习); object中存放键值对, 有些值是对象类型
假设整个字符串表示一个Perosn对象
JSONObject obj1 = new JSONObject(json); Person person = new Person(); person.setName(obj1.getString("name")); person.setAge(obj1.getInt("age")); JSONObject obj2 = obj1.getJSONObject("dept");// 要获取的值是JSON对象时,用getJSONObject(key) Department dept = new Department(); dept.setNo(obj2.getInt("no")); dept.setName(obj2.getString("name")); person.setDept(dept); System.out.println(person);
String json = "{name:'zhangsan',age:20,dept:{no:1,name:'android'}}";
json3
Test04: json数组中存放若干个对象
解析出一个Person的集合
String json = "[{name:'zhangsan',age:20}, {name:'lisi',age:21},{name:'wangwu',age:22}]";
List list = new ArrayList(); JSONArray array = new JSONArray(json); for(int i=0;i JSONObject obj = array.getJSONObject(i);//获取JSONArray中i下标的JSONObject Person person = new Person(); person.setName(obj.getString("name")); person.setAge(obj.getInt("age")); list.add(person); }
Test05:json数组(练习); 解析后存入ArrayList<Map> 提示代码为部分截取
String json = "[{name:'zhangsan',age:20}, {name:'lisi',age:21},{name:'wangwu',age:22}]";
List> list = new ArrayList>(); JSONArray array = new JSONArray(json); JSONObject obj = array.getJSONObject(i);//获取JSONArray中i下标的JSONObject Iterator it = obj.keys(); obj是JSONArray中每次遍历出来的JSONObject Object value = obj.get(key); map.put(key,value); list.add(map);
Test06(练习):对象的值是数组, 数组是由对象组成的
String json = "{persons:[{name:'zhangsan',age:20}," + "{name:'lisi',age:21},"+ "{name:'wangwu',age:22}] }";
List list = new ArrayList(); JSONObject obj = new JSONObject(json);//要获取的值如果是[]就用getJSONArray(key) JSONArray array = obj.getJSONArray("persons");
json4
Test07:Department中有若干Employee
String json = "{no:1,name:'android'," +
"employees:[{name:'zhangsan',age:20}," +
json5
Test08:数组由对象组成, 对象中有些值是对象
String json = "[{name:'张三',scores:{en:90,math:99,cn:89}},"
+ "{name:'李四',scores:{en:80,math:90,cn:99}}]";
json6 把bean转化为json字符串
重写Person的toString()方法
public String toString() { return "{name:'" + name + "', age:" + age + "}"; }
Person p = new Person();
p.setAge(18);
p.setName("zhangsan");
System.out.println(p);
{name:'zhangsan', age:18}
JSONObject obj = new JSONObject();
obj.put("person", p);
如果用put()方式加入java普通类的对象,产生的json字符串中, 对象是加了双引号的"{....}",表现为一个字符串
System.out.println(obj);
{"person":"{name:'zhangsan', age:18}"}
String personStr = obj.getString("person");
JSONObject obj2 = new JSONObject(personStr);
把字符串解析为json对象
System.out.println(obj2);
{"age":18,"name":"zhangsan"}
JSONObject obj3 = new JSONObject();
obj3.put("p",obj2);
如果用put()方式加入JSONObject类的对象, 产生的json字符串中,对象是没加双引号的{....}
System.out.println(obj3);
{"p": {"name":zhangsan, "age":18} }
json7 把bean的list转化为json字符串
重写Bean的toString()方法
将List中的所有对象转化为JSONObject, 再加入JSONArray中
JSONArray arr2 = new JSONArray();//创建一个空的JSONArray for(Person p:list){ JSONObject o1 = new JSONObject(); o1.put("name", p.getName()); o1.put("age", p.getAge()); arr2.put(o1);//注意不是add } System.out.println(arr2);//[{"age":18,"name":"zhangsan"},{"age":22,"name":"lisi"}] //也可以JSONArray arr = new JSONArray(list);
"{name:'lisi',age:21},{name:'wangwu',age:22}]}";
如果希望最外层是{...}, 则要将list装入json对象
JSONObject obj = new JSONObject(); ArrayList list = new ArrayList(); Person p1 = new Person(18,"zhangsan"); Person p2 = new Person(22,"lisi"); list.add(p1); list.add(p2); obj.put("persons", list);//当list作为JSONObject的值时,会默认转为JSONArray的格式 System.out.println(obj);//{"persons":[{"name":"zhangsan","age":18},{"name":"lisi","age":22}]}
作业1.从一个服务器端获取month.xml文件,在客户端(HttpClient/HttpURLConnection)将该文件转成json字符串的形式,最后解析该字符串内容。
提示: xml-->javabean对象的list-->json array-->String-->List 参考day30_homework