【Java Web】: GSON 数据格式详解

    在上一讲中我们讲到了 JSON数据格式的内容,这一讲我们来讲一下Google对JSON这种格式的支持。

    我们看到Java中的JSON库除了org.json之外还有一个 google-gson这个也是Java中很常用的json库,它是google自定义的json库,功能很强大,支持泛型,它也可以实现从json到java对象的装换,也可以从java对象转换成json数据。最重要的是Gson可以与任意的Java对象一起工作包括已经存在的你没法获取到它源代码的对象。(也就是有些对象提供给你是以Jar文件或者.class文件的形式提供给你的,这样你就只能使用这个对象,却无法去修改它的源代码)

    现在很多开源的项目都会可以转换Java对象成JSON,然后,他们中的很多都要求你在获得源代码中加上注解的方式完成的,而在实际开发中我们也有可能没办法访问到项目的源代码,而且这些开源项目而没法完全支持泛型。Gson考虑到上面两点的重要性而设计出来的。
    更多关于Gson内容查看其主页:http://code.google.com/p/google-gson/
    GSON的作用主要是完成 JSON数据格式与Java对象的互相转换

1. 下载GSON这个开源项目以及查看它的API文档

基本上我们一般是用com.google.gson这个类就可以解决大多数的问题。其中我们最长用的是这两个方法:
1) fromJson() :从JSON到Java对象
2) toJson():从Java对象转换成Json的字符串

2. 下面我们就来学习一下GSON的相关用法

1) 首先要在MyEclipse中导入GSON的jar文件

   在项目中右键 ---> Build Path ---> Configure Build Path ---> Libraries标签页---> add External JARs ---> 指定外部Jar文件所在目录  ---> OK. 如下图所示

【Java Web】: GSON 数据格式详解_第1张图片

2) 程序Demo如下,先写一个Person类,用来获取Person对象的属性

Person.java

package com.ahuier.json;

public class Person {
    
    private String username;
    private String password;
    private int age;
    private String address;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }   
}
GsonTest.java 讲person对象转换为JSON数据,此时person对象有四个属性。

package com.ahuier.json;

import com.google.gson.Gson;

public class GsonTest {

    public static void main(String[] args) {
        
        Person person = new Person();
        person.setUsername("AHuier");
        person.setPassword("123456");
        person.setAddress("XIAMEN");
        person.setAge(30);
        
        // 如果客户端如JavaScript需要使用到这些对象,直接使用不行,所以需要用GSON来做桥梁
        // 用gson将对象转换成Json的字符串
        Gson gson = new Gson();
        String result = gson.toJson(person);
        System.out.println(result);
    }

}
程序执行结果如下:打印出来的是一个完全符合JSON格式的字符串。所以使用GSON是特别方便的。

{"username":"AHuier","password":"123456","age":30,"address":"XIAMEN"}

3) 在上述程序的基础上我们在Person类里面添加一个list,然后往list中添加三条数据,实验一下GSON处理person对象转换成JSON数据格式是什么样的。

1. Person.java现在对于person对象来说有三个普通的属性,还有一个集合的属性,集合里面有三个字符串.

package com.ahuier.json;

import java.util.ArrayList;
import java.util.List;


public class Person {
    
    private String username;
    private String password;
    private int age;
    private String address;
    
    private List<String> list = new ArrayList<String>();
    
    public List<String> getList() {
        return list;
    }
    public void setList(List<String> list) {
        this.list = list;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }   
}
2. GsonTest.java

package com.ahuier.json;

import com.google.gson.Gson;

public class GsonTest {

    public static void main(String[] args) {
        
        Person person = new Person();
        person.setUsername("AHuier");
        person.setPassword("123456");
        person.setAddress("XIAMEN");
        person.setAge(30);
        
        // Json中没有集合的概念,显然这边list在JSON中都会转换成数组的形式。
        person.getList().add("YouNi");
        person.getList().add("AHui");
        person.getList().add("AHuier|YouNi");
        
        Gson gson = new Gson();
        String result = gson.toJson(person);
        System.out.println(result);
    }

}
程序执行结果如下,很显然它将List转换为数组的形式了,下面就是将person对象转换成JSON的数据格式了。

{"username":"AHuier","password":"123456","age":30,"address":"XIAMEN","list":["YouNi","AHui","AHuier|YouNi"]}

关注下一篇博文,下一我博文我会对JSON与GSON在Android客户端与服务端的应用做一个统一的梳理,敬请关注。


你可能感兴趣的:(JavaScript,json,android,gson,开源项目)