1 package gson;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import com.google.gson.Gson;
7 import com.google.gson.GsonBuilder;
8 import com.google.gson.reflect.TypeToken;
9
10 /**
11 * Gson:解析json工具基础用法加高级进阶
12 *
13 * ClassName: GsonUtils
14 * TypeToken:只是为了提取泛型的类型而已
15 * 控制缩进:final Gson gson = new GsonBuilder().setVersion(1.1).setPrettyPrinting().create();
16 * 调用setPrettyPrinting方法,改变gson对象的默认行
17 *
18 * @Description: TODO
19 * @author liuhl
20 * @date 2018年3月1日
21 */
22 public class GsonUtils {
23
24 public static final Gson gson = new GsonBuilder().create();
25
26 /* 基本数据类型的解析 */
27 int number = gson.fromJson("1", int.class);
28 double money = gson.fromJson("800.25", double.class);
29 boolean bool = gson.fromJson("true", boolean.class);
30 String str = gson.fromJson("kele", String.class);
31 /* 基本数据类型的解析 */
32
33 /* 基本数据类型的生成 */
34 String istr = gson.toJson(1);
35 String dstr = gson.toJson(9000.88);
36 String bstr = gson.toJson("true");
37 String str2 = gson.toJson("baihe");
38 /* 基本数据类型的生成 */
39
40 /* 实体类的解析与生成 */
41 Ticket ticket = new Ticket("2002", 33333.33, "1.1.230010", true);
42 String json = gson.toJson(ticket);
43 Ticket tick = gson.fromJson(json, Ticket.class);
44 /* 实体类的解析与生成 */
45
46 /* json转为数组 */
47 String jsonss = "['aa','bb','cc','dd']";
48 String[] ss = gson.fromJson(jsonss, String[].class);
49 String jsonsss = gson.toJson(ss);
50 /* json转为数组 */
51
52 /* json <----> List */
53 String ljson = "['username','age','data']";
54 List<String> list = gson.fromJson(ljson, new TypeToken<List<String>>() {}.getType());
55 String listjson = gson.toJson(list);
56 /* json <----> List */
57
58 /* 泛型的使用 */
59 User<Ticket> user = new User<Ticket>("10001", 25, ticket);
60 String userjson = gson.toJson(user);
61 User<Ticket> userticket = gson.fromJson(userjson, new TypeToken<User<Ticket>>() {}.getType());
62 /* 泛型的使用 */
63
64
65
66
67 public static void main(String[] args) {
68 /*扩展*/
69 List<Ticket> ticList = new ArrayList<>();
70 ticList.add(new Ticket("3003", 444.444, "2.2.30003", false));
71 ticList.add(new Ticket("4004", 444.444, "4.4.30003", true));
72 ticList.add(new Ticket("5005", 444.444, "5.5.30003", false));
73 ticList.add(new Ticket("6006", 444.444, "6.6.30003", true));
74 ticList.add(new Ticket("7007", 444.444, "7.7.30003", false));
75
76 User<List<Ticket>> userlistTic = new User<List<Ticket>>("lhl", 28, ticList);
77 String json = gson.toJson(userlistTic);
78 User<List<Ticket>> ticuserList = gson.fromJson(json, new TypeToken<User<List<Ticket>>>(){}.getType());
79 /*扩展*/
80 System.out.println(ticuserList.age);
81 System.out.println(ticuserList.usercode);
82 for (Ticket ticket : ticuserList.data) {
83 System.out.println(ticket.dealCode);
84 System.out.println(ticket.instnCode);
85 System.out.println(ticket.dealFlag);
86 System.out.println(ticket.money);
87 }
88 }
89 }

使用GSON工具实现json和其他数据格式间转换的更多相关文章

  1. json数据与Gson工具类的使用

    JS中使用JSON JSON对象 --> JSON字符串:JSON.stringify(对象) JSON字符串 --> JSON对象:JSON.parse(JSON字符串) <scr ...

  2. 让复杂Json数据和对象自由转换 --- Gson

    Gson是谷歌用于对Json操作的库,里面有着强大而又方便的功能,最常用的就是 fromJson():将json数据转化为对象: toJson():将对象转化为json数据! 对于普通的json数据使 ...

  3. Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...

  4. [转]用Gson来解析Json数据

    转自太阳尚远的博客:http://blog.yeqianfeng.me/2016/03/02/use_gson_to_parse_json/ 在我们实际开发中像Json和XML这两种格式的数据是最常见 ...

  5. GSON工具类

    import java.util.Map; import com.google.gson.reflect.TypeToken; import com.google.gson.FieldNamingPo ...

  6. gson笔记 解析json数据

    gson中负责json数据解析的类是JsonReader. Json格式有两种结构,一种是对象(键值对的组合,无序),另外一种是数组(值的有序集合). 因此针对这两种格式,JsonReader提供了不 ...

  7. Json与javaBean之间的转换工具类

    /**  * Json与javaBean之间的转换工具类  *  * {@code 现使用json-lib组件实现  *    需要  *     json-lib-2.4-jdk15.jar  * ...

  8. 使用Gson送解析Json格式

    Java bean: package com.jingle.a; public class Person { public String name; public int age; public Pe ...

  9. json、xml ---- 数据格式生成类

    自己写的一个生成json/xml 格式数据的类,可用于api数据传输: <?php class Response{ /** *生成指定数据格式 *@param intval $code 状态码 ...

随机推荐

  1. Codeforces 977D: Divide by three, multiply by two(暴力)

    题意 有nnn个无序的数,对这些数进行排列,要求ai=3×ai+1a_i=3\times a_{i+1}ai​=3×ai+1​或2×ai=ai+12\times a_i=a_{i+1}2×ai​=ai ...

  2. Django 数据迁移

    在1.6之前, Django只支持添加新的model到数据库, 而无法编辑或修改已经存在的model. 在当时, 这些Django缺失的功能可以通过South实现. 1. 新的命令 Django 1. ...

  3. Redis事务和实现秒杀功能的实现

    今天带着学生学习了Redis的事务功能,Redis的事务与传统的关系型数据库(如MySQL)有所不同,Redis的事务不能回滚. Redis中使用multi.exec.discard.watch.un ...

  4. java面试总躲不过的并发(二):volatile原理 + happens-before原则

    一.happens-before原则 同一个线程中的,前面的操作 happens-before 后续的操作.(即单线程内按代码顺序执行.但是,在不影响在单线程环境执行结果的前提下,编译器和处理器可以进 ...

  5. Linux第四节课学习笔记

    touch命令可修改文件atime和mtime,不能修改ctime.可用于修改文件后将修改时间改回之前修改时间. mkdir命令用于创建空白的目录,格式为“mkdir [选项] 目录”.加上参数-p可 ...

  6. Redis连接方式

    连接redis 本地安装了Redis并运行在6379端口,密码设置为 foobared. 1. from redis import StrictRedis redis = StrictRedis(ho ...

  7. Echart横坐标时间轴滑动

    主要针对于dataZoom的使用,代码如下: option = { title: { text: '未来一周气温变化', subtext: '纯属虚构' }, tooltip: { trigger: ...

  8. SignalR 行实时通信最大连接数

    SignalR 搭建实时刷新应用虽然非常方便,但是有个问题你必须考虑到,就是一般的浏览器,对于SignalR的全双工通信方式,绝大多数浏览器都只支持6个新窗口,如果你打开第7个,那么新的框口页面是不会 ...

  9. Space Invaders 太空侵略者

    发售年份 1978 平台 街机 开发商 Taito 类型 射击 https://www.youtube.com/watch?v=MU4psw3ccUI

  10. bond模式

    1.mode=0(balance-rr)(平衡抡循环策略) 链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路.交换机需要配置聚合口,思科叫port channel.特点:传输数据包顺序 ...