使用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
使用google的GSON解析json格式的数据的更多相关文章
- $Java-json系列(一):用GSON解析Json格式数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- 用GSON解析Json格式数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- Python3基础 json.loads 解析json格式的数据,得到一个字典
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Gson解析Json格式数据
//数据定义:=========================================== class User{ String name; String password; String ...
- Delphi用QJSON解析JSON格式的数据
本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动端使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 假入数据如下: {"message ...
- Delphi用QJSON解析JSON格式的数据 【转】
本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动端使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 假入数据如下: {"message ...
- 使用Gson解析json
前边的博客说过将json解析成java的方法,使用的是 这几个jar包,但是在解析时层遇到一个问题,就是在将时间字符串转换为java的Timestamp对象时会抛出异常,这个问题一直放在哪里没有去解决 ...
- 【Android进阶】Gson解析json字符串的简单应用
在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...
- 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据
百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路 ...
随机推荐
- Android服务之bindService源代码分析
上一篇分析startService时没有画出调用ActivityManagerService之前的时序图,这里画出bindService的时序图.它们的调用流程是一致的. 先看ContextWrapp ...
- JStorm的Metrics含义
附录:Metrics含义 MemoryUsed cluster/topology/worker使用到的物理内存HeapMemory cluster/topology/worker JVM使用到的堆内存 ...
- Appium Android Bootstrap源代码分析之简单介绍
在上一个系列中我们分析了UiAutomator的核心源代码,对UiAutomator是怎么执行的原理有了根本的了解.今天我们会開始另外一个在安卓平台上基于UiAutomator的新起之秀--Appiu ...
- Android 冷兵器 之 tools
代码地址如下:http://www.demodashi.com/demo/12612.html 前言 Android开发在所难免的就是UI的预览和调整,一般情况下都是直接run看效果,或者是使用AS的 ...
- org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
© 版权声明:本文为博主原创文章,转载请注明出处 1.问题描述 启动hibernate测试案例时报错如下: 2.解决方案: 2.1 第一次解决:MySQL驱动版本太高.使用的hibernate版本为5 ...
- php序列化&反序列化坑
一: 在php中如果我们统一编码是没有什么问题了,但是很多朋友会发现一个问题就是utf8和gbk编码中返回的值会有所区别: php 在utf8和gbk编码下使用serialize和unserializ ...
- intelligent_cam
https://github.com/shengkaisun/intelligent_cam/tree/772fe0e4d315f83ba01134389c6b618b1ce40aaf intelli ...
- Python基础之函数与装饰器
阅读目录 一.为什么要使用函数 二.函数的定义与调用 三.函数返回值 四.函数的参数 五.本章小结 六.装饰器 一.函数流程图: 函数名的命名规则: 1.函数名必须由字母下划线数字组成,不能是关键字和 ...
- smarty模版使用php标签,如何获取模版变量
smarty模版使用php标签,如何获取模版变量 in: 后端程序 已经assign一个模版变量$assign,由于要做特殊的循环输出,使用for循环,因此使用到了php标签,但是php语句和模版语句 ...
- 篇一、安装配置Android Studio
系统:Mac 10.10 Java JDK:官方JDK1.8 IDE:Android Studio 1.2 Android SDK:24.2 模拟器:genymtion 安装 Mac版本的Androi ...