最基础的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字符串的时候,就能很好的对应)。
--------------------------------------分割线 --------------------------------------
在C语言中解析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;
}
}
1
现在我们要将这个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());
}
}
说明:
这种方法,需要类中的成员变量名跟Json字符串中元素名相同;
Student类中成员变量必须有set方法,因为JSONObject通过toBean方法将Json字符串中元素的值赋给Student类中变量时,是通过set方法来赋值的。这也给我们解释了为什么1中说的名称要相同了;
当Student类中多了一些Json字符串中没有的成员变量,或者Json字符串多了一些Student类中没有的元素时,程序并不会报错,只是这些值在解析时,不会解析到我们的Student类中而已。
如果类中成员变量的类型跟Json字符串对应的类型不统一的话,也是有可能解析不到值的,如age值为字符串”abc”,在类中用int型age成员变量是接收不到值的。
第二种方法:从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);