Java-JSON解析

一、JSON

是JavaScript Object Notation的简写,基于JavaScript语言的的轻量级的数据交换格式,即用来传输数据的一种格式。

1、JSON数据的格式

JSON采用名值对的方式来表示一个对象的信息,同时支持无限层的嵌套。
JSON的本质是一串字符串,只不过元素使用特定的符号标注。

  • JSON对象:{name1:value1,name2:value2},用{}表示对象。
  • JSON数组:[{ },{ },{ },{ }],用[]表示数组。
  • 双引号(“”)或单引号(”)内是属性或值。
  • 冒号(:)表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)。

例如:用JSON串表示一个学生的基本信息,可以这么写:
{name:’zhangsan’,age:’20’,sex:’male’}
表示多个学生的基本信息:
[{name:’zhangsan’,age:’20’,sex:’male’},{name:’lisi’,age:’21’,sex:’male’}]

和用XML表示的信息相比,用JSON表示相同的信息,在传输的过程中极大的减少了信息的传输量,但是在可读性方面JSON串就比XML格式差。

二、JSON解析

解析JSON字符串的基本思路是把解析出来的信息放到一个实体类中去,在使用的时候创建一个对应的实例对象,取出对应的值。
在Android Studio有GsonFormat插件可以快速创建实体类对象。
方法一:

1.Android studio File->Settings..->Plugins–>Browse repositores..搜索GsonFormat
2.安装插件,重启android studio

方法二:

1.下载GsonFormat.jar ;
2.Android studio File->Settings..->Plugins –>install plugin from disk..导入下载GsonFormat.jar
3.重启android studio

1、常用的方法

解析JSON需要导入jar包json-lib.jar,由于Android系统内置了对JSON的支持,所以不用再导入jar包。
解析JSON对象(即以”{“开始的JSON字符串)要用JSONO bject类,解析JSON数组(即以”[“开始的JSON字符串)要用JSONArray类。

例1:JSON字符串转换为实例对象

Student类:

public class Student {
    private String name;
    private int age;
    private String sex;

    public Student(){   
    }

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    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 String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    }
}
public class JSONTest1 {
    //JSON字符串--->对象
    public static void main(String[] args) throws JSONException {
        String data = "{name:'zhangsan',age:'20',sex:'male'}";
        JSONObject json = new JSONObject(data);
        Student student = new Student();
        student.setName(json.getString("name"));
        student.setAge(json.getInt("age"));
        student.setSex(json.getString("sex"));
        System.out.println(student);
    }
}

例2:JSON字符串转换为多个实例对象

public class JSONTest2 {
//JSON字符串--->对象(多个)
    public static void main(String[] args) throws JSONException {
        String data = "[{name:'zhangsan',age:20,sex:'male'},{name:'zhangsan1',age:30,sex:'female'}]";
        JSONArray jsonArray = new JSONArray(data);
        Student student;
        List studentList = new ArrayList();
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            student = new Student();
            student.setName(jsonObject.getString("name"));
            student.setAge(jsonObject.getInt("age"));
            student.setSex(jsonObject.getString("sex"));
            studentList.add(student);
        }
        for (Student s : studentList) {
            System.out.println(s);
        }   
    }
}

例3:集合转换为JSON字符串

public class JSONTest3 {
    //集合----->JSON字符串
    public static void main(String[] args) throws JSONException {
        Student student ;
        List studentList = new ArrayList();
        student = new Student("zhangsan",20,"man");
        studentList.add(student);
        student = new Student("lisi",30,"man");
        studentList.add(student);
        JSONArray jsonArray = new JSONArray(studentList);
        System.out.println(jsonArray);
    }
}

例4:对象转换为JSON字符串

public class JSONTest4 {
    // 对象----->JSON字符串
    public static void main(String[] args) throws JSONException {
        Student student;
        student = new Student("zhangsan", 20, "man");
        JSONObject jsonObject = new JSONObject(student);
        System.out.println(jsonObject);
    }
}

2、Gson解析

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

2.1 Gson解析原理:

  • 通过GsonBuilder创建的Gson对象,用自定义的TypeAdapter完成解析。
  • 通过new Gson()创建的Gson对象,用Java的反射机制完成解析。

2.2Gson使用

在eclipse项目中需要导入jar包gson-2.2.4.jar,在Android Studio中 的APP中build.gradle文件中添加”compile ‘com.google.code.gson:gson:2.5’”
Gson常用的方法是通过反射的机制对json字符串进行解析。
例1:JSON字符串转换为对象

public class GsonTest1 {
    public static void main(String[] args) throws Exception, Exception {
        String data = "{name:'zhangsan',age:20,sex:'male'}";
        Gson gson = new Gson();
        Student student = new Student();
        student = gson.fromJson(data, Student.class);
        System.out.println(student);    
    }
}

例2:JSON字符串转换为多个对象的集合

public class GsonTest2 {
//json字符串--->集合
    public static void main(String[] args) {
        String data = "[{name:'zhangsan',age:20,sex:'male'},{name:'zhangsan1',age:30,sex:'female'}]";
        Gson gson = new Gson();
        List studentList = new ArrayList();
        TypeToken> token = new TypeToken>(){};
        studentList=gson.fromJson(data, token.getType());
        System.out.println(studentList);
    }
}

例3:对象转换为JSON字符串

public class GsonTest3 {
    public static void main(String[] args) {
        Student student ;
        Gson gson = new Gson();
        List studentList = new ArrayList();
        student = new Student("zhangsan",20,"man");
        studentList.add(student);
        student = new Student("lisi",30,"man");
        studentList.add(student);
        //对象--->json字符串
        String data = gson.toJson(student, Student.class);
        System.out.println("对象--->json字符串:"+data);
        //集合--->json字符串
        TypeToken> token = new TypeToken>(){};
        String data1 = gson.toJson(studentList, token.getType());
        System.out.println("集合--->json字符串:"+data1);
    }
}

3、Fastjson解析

一个阿里巴巴的开源解析工具,采用java语言编写而成,没有依赖于第三方的类库,除了JDK外,性能好,速度快。
3.1 Fastjson使用
使用Fastjson需要导入fastjson-1.1.22.jar包。
Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

// 把JSON文本parse为JavaBean 
public static final  T parseObject(String text, Class clazz); 
 //把JSON文本parse成JavaBean集合 
public static final  List parseArray(String text, Class clazz);
// 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object); 

例1:JSON字符串转换为对象

public class FastJsonTest1 {
    public static void main(String[] args) {
        String data = "{name:'zhangsan',age:20,sex:'male'}";
        Student student = JSON.parseObject(data,Student.class);
        System.out.println(student);
    }
}

例2:JSON字符串转换为多个对象

public class FastJsonTest2 {
    public static void main(String[] args) {
        String data = "[{'name':'zhangsan','age':'20',sex:'male'},{'name':'zhangsan1',age:30,sex:'female'}]";
        List studentList = JSON.parseArray(data, Student.class);
        System.out.println("字符串-->多个对象:");
        System.out.println(studentList);
    }
}

例3:多个实例对象转换为JSON字符串

public class FastJsonTest3 {
    public static void main(String[] args) {
        Student student = new Student();
        List studentList = new ArrayList<>() ;
        student = new Student("zhangsan",20,"man");
        studentList.add(student);
        student = new Student("lisi",30,"man");
        studentList.add(student);
        String data = JSON.toJSONString(studentList);
        System.out.println(data);
    }
}

与JSON字符串处理有关的工具:
谷歌浏览器插件JSON-handle:http://download.csdn.net/detail/w_next/9479948
或在谷歌商店中搜索JSON-handle
科学上网工具1(壁虎漫步):https://gecko.la/?code=null&index=1
科学上网工具2(修改host文件):http://laod.cn/

你可能感兴趣的:(Java)