最基础的Json字符串:
{
"age": 20,
"gender": "male",
"grades": "三班",
"name": "苏三",
"weight": 63.5
}
上边是一个很基础的Json字符串,当我们看到这个字符串的时候,我们就要考虑,怎么解析这个Json字符串,解析后我们把信息放到一个什么样的实体类中。
首先,因为Json最外层使用”{}”大括弧包裹,我们能判断出,我们需要的最外层是一个类,而不是数组或者列表。那么我们定义一个类来对应它,Student.java。
接下来,我们分析一下此Json字符串中的属性元素。age对应的值是一个整数20,那么,我们就在Student类中对应的定义一个private的整形成员变量;age,gender、grades、name对应的值为字符串类型,那么,我们也相应的定义三个private的字符串成员变量;weight对应的值是一个有一位小数的浮点型,那么,我们定义一个private的float型的成员变量。(定义的成员变量名字最好跟Json字符串中的元素名字相同,这样在我们通过类来转Json字符串的时候,就能很好的对应)。
然后,我们给所有的成员变量生成get/set方法。
我们生成的Student.java如下:
package com.bean;
/**
* 学生
*/
public class Student {
private int age;//年龄
private String gender;//性别,male/female
private String grades;//班级
private String name;//姓名
private float weight;//体重
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getGrades() {
return grades;
}
public void setGrades(String grades) {
this.grades = grades;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
}
现在我们要将这个Json字符串内容解析出来并存放到Student实体类中:
第一种方法,直接通过JSONObject将Json字符串转成Student。
package com.test;
import net.sf.json.JSONObject;
import com.bean.Student;
public class Domain {
public static void main(String[] args) {
String jsonStr = "{\"age\":20,\"gender\":\"male\",\"grades\":\"三班\",\"name\":\"苏三\",\"weight\":63.5}";
JSONObject jsonObject = JSONObject.fromObject(jsonStr);
Student stu = (Student) JSONObject.toBean(jsonObject, Student.class);
System.out.println(stu.getName());
}
}
说明:
第二种方法:从JSONObject获取各个元素对应的值
package com.test;
import net.sf.json.JSONObject;
public class Domain {
public static void main(String[] args) {
String jsonStr = "{\"age\":20,\"gender\":\"male\",\"grades\":\"三班\",\"name\":\"苏三\",\"weight\":63.5}";
JSONObject jsonObject = JSONObject.fromObject(jsonStr);
int age = jsonObject.getInt("age");
String gender = jsonObject.getString("gender");
String grades = jsonObject.getString("grades");
String name = jsonObject.getString("name");
float weight = (float) jsonObject.getDouble("weight");
System.out.println(age);
System.out.println(gender);
System.out.println(grades);
System.out.println(name);
System.out.println(weight);
}
}
说明:
第三种方法:用迭代器迭代输出
package com.test;
import java.util.Iterator;
import net.sf.json.JSONObject;
public class Domain {
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
String jsonStr = "{\"age\":20,\"gender\":\"male\",\"grades\":\"三班\",\"name\":\"苏三\",\"weight\":63.5}";
JSONObject jsonObject = JSONObject.fromObject(jsonStr);
Iterator keys = jsonObject.keys();
String key = null;
Object value = null;
while(keys.hasNext()){
key = (String) keys.next();
value = jsonObject.get(key);
System.out.println("key:"+key+" value:"+value.toString());
}
}
}
说明:
最后,我们来看一下,怎么反向通过Student类来生成一个Json字符串
package com.test;
import net.sf.json.JSONObject;
import com.bean.Student;
public class Domain {
public static void main(String[] args) {
Student stu = new Student();
stu.setAge(25);
stu.setGender("female");
stu.setGrades("一班");
stu.setName("露西");
stu.setWeight(51.3f);
String jsonStr = JSONObject.fromObject(stu).toString();
System.out.println(jsonStr);
}
}
生成的字符串为:
{"age":25,"gender":"female","grades":"一班","name":"露西","weight":51.3}