GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用。如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的libs目录下添加这个文件即可;如果是在Java项目中,则把gson-2.2.4.jar先添加到当前项目的任意一个包中,然后右键点击这个jar包 -> 构建路径 -> 添加至构建路径。这样准备工作就做好了

简单介绍下json

json表示:
 JavaScript对象表示法(JavaScript Object Notation), 是一种轻量级的数据交换格式, 易于人阅读和编写, 同时也易于机器解析和生成。
 json数据格式表示法:
          对象是一个无序的“’名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
json的主要组成部分:
     JSON是object、array、string、number、boolean(true/false)和null。

一个具体的json实例:
 {
    "china":{
        "hangzhou":{"item":"1"},
        "shanghai":{"item":"2"},
        "chengdu":{"item":"3"}
    },

简单的做法是:

toJson()将数据类型转换成json数据格式

fromJson()将json格式数据转换成对应的数据  类型

下面例子中我们采用一个简单的util类,需要自己去编写

public class GsonUtil {
    // 定义一个json对象
    public static Gson gson = new Gson();

// 将json数据转换成对应的类型数据
    public static <T> T parseJsonWithClass(String jsonData, Class<T> type) {
        T result = gson.fromJson(jsonData, type);
        return result;
    }

// 将其他类型数据转换成json数据
    public static String parseToJson(Object jsonData) {
        String result = gson.toJson(jsonData);
        return result;
    }

// 将json数据转换成list集合
    public static <T> List<T> parseJsonArrayWithGson(String jsonData, Class<T> type) {
        List<T> result = gson.fromJson(jsonData, new TypeToken<List<T>>() {
        }.getType());
        return result;
    }
}

写两个简单的实体类

public class Person {
    private String name;
    private int age;
    private List<Man> manList;
    private Man man;

对应相应的get()和set()方法

加个toString()方法
}

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

对应相应的get()和set()方法

加个toString()方法

}

接下来说下使用Gson与java中的数据类型转换

int num = 3;
        System.out.println("int转换成json" + (GsonUtil.parseToJson(num)));
        String int_json = "{'num':11}";
     
        // json数据跟String基本数据类型之间的转化
        String test = "hello";
        System.out.println("String转换成json数据" + (GsonUtil.parseToJson(test)));

// 多维数据转换成json
        int[][] intInt = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
        String mutiArray = GsonUtil.parseToJson(intInt);
        System.out.println("多维数据是:" + mutiArray);
        // json转换成多维数组
        int[][] mutiInit = GsonUtil.parseJsonWithClass(mutiArray, int[][].class);
        // 打印出数组中一维数据
        for (int i = 0; i < mutiInit.length; i++) {
            System.out.print(mutiInit[i] + " ");
        }
        System.out.println();
        // 打印出数组中每条数据
        for (int i = 0; i < mutiInit.length; i++) {
            for (int j = 0; j < mutiInit[i].length; j++) {
                System.out.println(mutiInit[i][j] + " ");
            }
        }
        // map集合转化成json
        Map<String, String> map = new HashMap<String, String>();
        map.put("name", "张三");
        map.put("age", "20");
        map.put("sex", "man");
        String mapString = GsonUtil.parseToJson(map);
        System.out.println(mapString);
        // json转化成map,list集合类似
        Gson gson = new Gson();
        Map map1 = gson.fromJson(mapString, new TypeToken<Map<String, String>>() {
        }.getType());
        System.out.println("json转换map后的数据是" + map.get("name") + " " + map.get("age") + " " + map.get("sex"));

// json数据转换日期格式
        Gson gson2 = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
        Student stu = new Student("李四111", 20);
        stu.setDate(new Date());
        System.out.println("转换成日期格式的student数据" + gson2.toJson(stu));
        String stuJson = "{'name':'zhang','age':31,'date':'2016-12-12'}";
        Student ss = gson2.fromJson(stuJson, Student.class);
        System.out.println("输出格式化的日期格式" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(ss.getDate()));
        Date dd = new Date();
        String ss1 = gson2.toJson(dd);
        System.out.println("date转换成json数据" + ss1);
        Date dd1 = gson2.fromJson(ss1, Date.class);
        System.out.println("json转换成date日期格式数据是" + dd1);

// 实体对象中单条数据解析
        String str1 = "{'name':'zhangsan1','age':11}";
        Person p1 = GsonUtil.parseJsonWithClass(str1, Person.class);
        System.out.println(p1.getName() + " " + p1.getAge());
        // 实体中单条数据有嵌套数据
        String str2 = "{'name':'zhangsan2','age':22,'man':{'name':'lisi','age':12}}";
        Person p2 = GsonUtil.parseJsonWithClass(str2, Person.class);
        System.out.println(p2.getName() + " " + p2.getAge() + " " + p2.getMan().toString());
        // 实体中解析集合数据,多条json数据
        String str = "[{'name':'John','age':20, 'man':{'name':'zhangsan3','age':33},'manList':[{'name':'English','age':100},{'name':'Math','age':78},{'name':'shuxue','age':98}]},{'name':'jack','age':33,'man':    {'name':'zhangsan4','age':34},'manList':[{'name':'1111','age':33},{'name':'21213','age':55}]}]";
        List<Person> pp = GsonUtil.parseJsonArrayWithGson(str, Person.class);
        System.out.println("从json转换后的数据:");

测试结果如下:

int转换成json   3
String转换成json数据   "hello"
多维数据是:   [[1,2,3],[4,5,6],[7,8,9]]
[I@219c9a58 [I@305918a5 [I@2961116f
1
2
3
4
5
6
7
8
9
{"sex":"man","age":"20","name":"张三"}
json转换map后的数据是        张三 20 man
转换成日期格式的student数据   {"name":"李四111","age":20,"date":"2017-01-20"}
输出格式化的日期格式   2016-12-12 00:00:00
date转换成json数据    "2017-01-20"
json转换成date日期格式数据是     Fri Jan 20 00:00:00 CST 2017
zhangsan1 11
zhangsan2 22 lisi 12

参考链接地址是:http://www.cnblogs.com/jiayongji/p/5297187.html

使用google的GSON解析json格式的数据的更多相关文章

  1. $Java-json系列(一):用GSON解析Json格式数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  2. 用GSON解析Json格式数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  3. Python3基础 json.loads 解析json格式的数据,得到一个字典

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  4. Gson解析Json格式数据

    //数据定义:=========================================== class User{ String name; String password; String ...

  5. Delphi用QJSON解析JSON格式的数据

    本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动端使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 假入数据如下: {"message ...

  6. Delphi用QJSON解析JSON格式的数据 【转】

    本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动端使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 假入数据如下: {"message ...

  7. 使用Gson解析json

    前边的博客说过将json解析成java的方法,使用的是 这几个jar包,但是在解析时层遇到一个问题,就是在将时间字符串转换为java的Timestamp对象时会抛出异常,这个问题一直放在哪里没有去解决 ...

  8. 【Android进阶】Gson解析json字符串的简单应用

    在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...

  9. 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据

    百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路 ...

随机推荐

  1. vertex buffer 数据结构 如何读vb的memory pool

    vertex attribute (declaration)    vertex stream (memory pool) 这两部分 通过attribute 里面对memory的描述把两部分 vbo ...

  2. Win7下nginx默认80端口被System占用,造成nginx启动报错的解决方案

    Win7下nginx默认80端口被System占用,造成nginx启动报错的解决方案   在win7 32位旗舰版下,启动1.0.8版本nginx,显示如下错误:  [plain] 2012/04/0 ...

  3. DevExpress控件之LayoutControl

    一.项目运行中不显示右键菜单 layoutControl1.AllowCustomization = false 二.控件超出容器后不显示滚动条 layoutControl1.AtuoScroll = ...

  4. 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-1 获取和设置系统时间

    使用功能块NT_GetTime,NETID填写两个单引号表示本机,START就是一个触发信号,一般的功能块都需要一个上升沿触发执行,最后的输出类型都是让系统自己决定,然后统一把这些变量放到全局变量中( ...

  5. JavaScript数组归并方法reduce

    示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...

  6. JavaScript数组求最大值 面试题

    1.JavaScript数组求最大值 (1)方法一:借用math.max (2)方法二:ES6 2.代码 <!DOCTYPE html> <html lang="zh&qu ...

  7. 【VBA】修改Excle的标题

    打开Excle的时候,有时候不需要显示Miscrosoft Excle,如下图标记,想把标记内的内容替换为:管理系统 操作代码: Public Sub 修改标题() Application.Capti ...

  8. TCP/IP协议分析(推荐)

    一;前言 学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了.本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体 ...

  9. 设计模式之十一:抽象工厂模式(Abstract Factory)

    抽象工厂模式: 提供了一个创建一系列相关的或相互依赖的对象的接口而不须要详细指定它们的类型. Provide an interface for creating families of related ...

  10. Eclipse配色利器

    1 http://eclipsecolorthemes.org/  这是官网 2 安装后,window-preferences-general-appearance-color theme 即可找到多 ...