c#谷歌 json转对象_利用Google Gson实现JSON字符串和对象之间相互转换
最近一个项目需要用到JSON,需要在JSON字符串和对象之间相互转换,在网上找了些资料,发现google的Gson还是比较不错的。
废话不说,下面是简单的例子:
先上源码:下载(包含jar包)
Person实体类
package com.hsun.json;
/**
* Person 实体类
* @author hsun
*
*/
public class Person {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", 姓名=" + name + ", 年龄=" + age + "]";
}
}实体很简单,当然Person的字段也可以是List、Set、Map等~~~
把对象转为JSON格式的字符串
Gson gs = new Gson();
Person person = new Person();
person.setId(1);
person.setName("我是酱油");
person.setAge(24);
String objectStr = gs.toJson(person);//把对象转为JSON格式的字符串
System.out.println("把对象转为JSON格式的字符串/// "+objectStr);
上面的代码重点是Gson对象,它提供了toJason()方法将对象转换成Json字符串,上面代码的objectStr对象值为:
{"id":1,"name":"我是酱油","age":24}
把List转为JSON格式的字符串
Gson gs = new Gson();
List persons = new ArrayList();
for (int i = 0; i < 10; i++) {//初始化测试数据
Person ps = new Person();
ps.setId(i);
ps.setName("我是第"+i+"个");
ps.setAge(i+10);
persons.add(ps);
}
String listStr = gs.toJson(persons);//把List转为JSON格式的字符串
System.out.println("把list转为JSON格式的字符串/// "+listStr);
上面代码的listStr对象值为:
[{"id":0,"name":"我是第0个","age":10},{"id":1,"name":"我是第1个","age":11},{"id":2,"name":"我是第2个","age":12},{"id":3,"name":"我是第3个","age":13},{"id":4,"name":"我是第4个","age":14},{"id":5,"name":"我是第5个","age":15},{"id":6,"name":"我是第6个","age":16},{"id":7,"name":"我是第7个","age":17},{"id":8,"name":"我是第8个","age":18},{"id":9,"name":"我是第9个","age":19}]
很标准的json数据~~~
下面来看看gson的反序列化,Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。
我们一般都会碰到两种情况,1:转成单一实体对象 2:转换成对象列表或者其他结构。
先看第一种:
JSON字符串为上面的objectStr:{"id":1,"name":"我是酱油","age":24}
代码:
Person jsonObject = gs.fromJson(objectStr, Person.class);//把JSON字符串转为对象
System.out.println("把JSON字符串转为对象/// "+jsonObject.toString());提供两个参数,分别是json字符串以及需要转换对象的类型。
第二种,转换成列表类型:
JSON字符串为上面的listStr:[{"id":0,"name":"我是第0个","age":10},{"id":1,"name":"我是第1个","age":11},{"id":2,"name":"我是第2个","age":12},{"id":3,"name":"我是第3个","age":13},{"id":4,"name":"我是第4个","age":14},{"id":5,"name":"我是第5个","age":15},{"id":6,"name":"我是第6个","age":16},{"id":7,"name":"我是第7个","age":17},{"id":8,"name":"我是第8个","age":18},{"id":9,"name":"我是第9个","age":19}]
代码:
List jsonListObject = gs.fromJson(listStr, new TypeToken>(){}.getType());//把JSON格式的字符串转为List
for (Person p : jsonListObject) {
System.out.println("把JSON格式的字符串转为List/// "+p.toString());
}可以看到上面的代码使用了TypeToken,它是Gson提供的数据类型转换器,可以支持各种数据集合类型转换。
Gson的基本使用就这么多,其他请参考官方文档,希望对你们有帮助~~~
c#谷歌 json转对象_利用Google Gson实现JSON字符串和对象之间相互转换相关推荐
- JS解析json数据(json字符串和数组之间相互转换)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
- python 根据地址求经纬度 谷歌_利用google的API获取世界城市经纬度(python实现)
google API 需要 --. #-*- coding: utf8 -*- from xml.dom import minidom import urllib2, urllib #这个KEY本来是 ...
- python json删除字段_如何使用python删除json对象?
我正在使用python删除和更新一个由用户提供的数据生成的JSON文件,这样数据库中只存储很少的项目.我想从JSON文件中删除一个特定的对象. 我的JSON文件是: [ { "ename&q ...
- java json asc排序_按ASCII码给json对象排序
/** * 按ASCII码给json对象排序(规定:升序) * @param json * @return */ public static String sortAsciiJson(String j ...
- Okhttp源码分析以及Google Gson解析json数据实例
Okhttp Github的Okhttp OkHttp是一个高效的HTTP客户端,它有以下默认特性: 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接 透明的GZIP压缩减少响 ...
- python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...
笔者学习Python已有一段时间,一直以为对于可迭代对象(iterable).迭代器(iterator).生成器(generator)有一定理解了,直到看到<流畅的python>中的讲解才 ...
- kotlin半生对象_如何在Kotlin中使用Actor实现对象池
kotlin半生对象 by osha1 由osha1 如何在Kotlin中使用Actor实现对象池 (How to implement an Object-Pool with an Actor in ...
- 易语言json置入_易语言取置JSON文本使用方法-易语言学习-猴子技术宅
什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON到底是什么? JSON就是一串字符串 只 ...
- java 两日期的周数_利用 Java 中 Calendar 计算两个日期之间的天数和周数
利用 Java 中 Calendar 计算两个日期之间的天数和周数 前言 究竟什么是一个 Calendar 呢? 中文的翻译就是日历, 那我们立刻可以想到我们生活中有阳 (公) 历阴 (农) 历之分它 ...
最新文章
- 多视图立体匹配论文分享 | Fast-MVSNet (CVPR2020)
- mybatis以及预编译如何防止SQL注入
- OpenSSL使用指南
- matlab中fdyn,Matlab的用法总结
- 在NOILINUX下的简易VIM配置
- bzoj 2878 [Noi2012]迷失游乐园——树上的期望dp
- python中的序列类型和序列号_python~序列类型及操作
- C++ 对引用的理解5
- Linux下BitNami Redmine的插件安装与更新
- Android系统性能优化(68)---绘制优化
- 贯穿时域与频域的方法——傅立叶分析
- python 重启同一个程序_Python – 在重启之间保存程序的状态?
- Error:Failed to open zip file. Re-download dependencies and sync project
- java 图形编辑器_SVGX矢量化图形编辑器,100%JAVA实现的矢量化图形编辑器
- 洛谷 P3388 【模板】割点(割顶) 根+非根+dfn[]+low[]+不一样的Tarjan算法
- 【香橙派4B】1、重刷系统
- c++中的pow()函数
- 实验二 CPU 部件实现之 ALU 和寄存器堆
- python模拟输入文本内容(打破复制粘贴限制)
- 与同行的对比,M-DAO的崛起已成定局