JSON
json有两种 表现形式:对象、数组
对象:{数据:值}
数组:[数据:数据]
在解析的时候,如果是花括号,则代表对象,解析的时候使用JSONObject。如果是中括号则代表是数组,解析的时候使用JSONArray。
/*String json = "{no:1,name:'android', employees:[{name:'zhangsan',age:20}, {name:'lisi',age:21},{name:'wangwu',age:22}]}";
JSONObject j = new JSONObject(json);//最外层是花括号,所以使用JSONObject来解析
//解析最外层后,由于no和name都没有再被花括号或中括号包裹,所以可以直接获取no和name的值
System.out.println("no:"+j.getInt("no"));
System.out.println("name:"+j.getString("name"));
//由于数据enployees的值是一个数组,所以需要利用上一步获取的JSONObject来获取JSONArray,获取之后,数组中的对象则全部被保存到JSONAarray中了
JSONArray ary = j.getJSONArray("employees");
//可以创建一个Person类,来保存每个对象的数值,也可以不用
List<Person> list = new ArrayList<>();
//遍历获取数组中每个对象
for(int i =0; i<ary.length(); i++){
JSONObject obj = ary.getJSONObject(i);//由于数组中的是对象,所以需要用JSONObject来获取
Person p = new Person();
p.setName(obj.getString("name"));
p.setAge(obj.getInt("age"));
list.add(p);
}
for (Person person : list) {
System.out.println(person);
}*/
String json = "[{name:'张三',scores:{en:90,math:99,cn:89}}, {name:'李四',scores:{en:80,math:90,cn:99}}]";
JSONArray ary = new JSONArray(json);
List<Student> list = new ArrayList<>();
for (int i = 0; i <ary.length(); i++) {
JSONObject obj = ary.getJSONObject(i);
Student stu = new Student();
stu.setName(obj.getString("name"));
JSONObject obj1 = obj.getJSONObject("scores");
stu.setEn(obj1.getInt("en"));
stu.setMath(obj1.getInt("math"));
stu.setCn(obj1.getInt("cn"));
list.add(stu);
}
for (Student student : list) {
System.out.println(student);
}