Java解析Json字符串

最基础的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字符串的时候,就能很好的对应)。

--------------------------------------分割线 --------------------------------------

[译]JSON数据范式化(normalizr) 

如何处理JSON中的特殊字符

Struts中异步传送XML和JSON类型的数据

Linux下JSON库的编译及代码测试

jQuery 获取JSON数据[$.getJSON方法]

用jQuery以及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);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5705387dbcc007517cfe836bd4cf7b30.html