zoukankan      html  css  js  c++  java
  • 使用google的GSON解析json格式的数据

          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

  • 相关阅读:
    【证明】—— 二叉树的相关证明
    ubuntu编译安装opencv
    【换句话说】【等价描述】—— 定义及概念的不同描述
    YOLOv3训练自己的数据
    【证明】【一题多解】布尔不等式(union bound)的证明
    机器视觉:MobileNet 和 ShuffleNet
    keras图像风格迁移
    【算法导论】【排序】—— 计数排序(counting sort)
    【等价转换】—— min/max 的转换与互相转换
    卷积神经网络特征图可视化(自定义网络和VGG网络)
  • 原文地址:https://www.cnblogs.com/Ant-soldier/p/6322456.html
Copyright © 2011-2022 走看看