分别建两个类,Student类与Grade类
package test;
public class Student {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Student() {
super();
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
package test;
import java.util.ArrayList;
public class Grade {
private int id;
private String name;
private ArrayList<Student> stus;
public Grade(int id, String name, ArrayList<Student> stus) {
super();
this.id = id;
this.name = name;
this.stus = stus;
}
public Grade() {
super();
}
@Override
public String toString() {
return "Grade [id=" + id + ", name=" + name + ", stus=" + stus + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList<Student> getStus() {
return stus;
}
public void setStus(ArrayList<Student> stus) {
this.stus = stus;
}
}
下面是测试方法
package test;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class jsonTest {
public static void main(String[] args) {
//对象嵌套数组嵌套对象
String json1="{'id':1,'name':'JAVA','stus':[{'id':101,'name':'张三','age':16}]}";
//数组
String json2="['北京','天津','杭州']";
//单个学生
String json3="{'id':101,'name':'张三','age':16}";
String json4="[{'id':101,'name':'张三','age':16,'address':'china'},{'id':102,'name':'李四','age':17},{'id':103,'name':'王五','age':16}]";
//1
//解析第一层---对象
JSONObject jObject1=JSONObject.fromObject(json1);
Grade grade=new Grade();
grade.setId(jObject1.getInt("id"));
grade.setName(jObject1.getString("name"));
ArrayList<Student> stus=new ArrayList<>();
grade.setStus(stus);
//解析第二层----数组
JSONArray jsonArray2=jObject1.getJSONArray("stus");
//遍历数组获取元素----对象
for(int i=0;i<jsonArray2.size();i++){
//解析第三层----对象
JSONObject jObject3=jsonArray2.getJSONObject(i);
Student student=new Student(jObject3.getInt("id"), jObject3.getString("name"), jObject3.getInt("age"));
grade.getStus().add(student);
}
System.out.println(grade);
//获取当前对象的所有属性的迭代器对象
@SuppressWarnings("unchecked")
Iterator<String> iterator=jObject1.keys();
while (iterator.hasNext()) {
String key = iterator.next();
System.out.println("属性:"+key);
}
Class clazz=grade.getClass();
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields) {
System.out.println(f.getName());//打印每个属性的名字
System.out.println(f.getType().getName());//打印每个属性的类型名字
}
//2
//获取数组对象
JSONArray jArray=JSONArray.fromObject(json2);
ArrayList<String> list=new ArrayList<>();
//遍历获取元素
for(int i=0;i<jArray.size();i++){
//jArray.optString(i);//等价于getXXX
list.add(jArray.getString(i));
}
System.out.println("解析结果:"+list);
//3
//将对象转换成字符串
JSONObject jo=JSONObject.fromObject(grade);
String joStr=jo.toString();
System.out.println(joStr);
JSONArray ja=JSONArray.fromObject(grade);
String jaStr=ja.toString();
System.out.println(jaStr);
//4
//JSON字符串转换成对象
JSONObject joStu=JSONObject.fromObject(json3);
Student st=(Student)JSONObject.toBean(joStu,Student.class);//如果joStu的属性与Student的不一致,会出现警告
System.out.println(st);
JSONArray jaStu=JSONArray.fromObject(json4);
List<Student> listStu=JSONArray.toList(jaStu,Student.class);//如果jaStu的属性与Student的不一致,会出现警告
System.out.println(listStu);
}
}