GSON的用法(处理对象和JSON的相互转化):

Gson是Google自己写的一个Java对象与JSON相互转化的工具包,首先我们需要下载jar包,这里可用idea直接下载,下载步骤如下;点击项目结构

点击+号:

点击maven:

然后搜索jar包关键字gson:

下载到项目的指定位置

编写一个JSON文件

[{"id": 9223232323,"text": "How do I read a JSON stream in Java","geo": null,"user": {"name": "json_new","followers_count": 41}},{"id": 8787879686,"text": "@Json just use JsonReader","geo": [56.23212323,-1034.343],"user": {"name": "java nb","followers_count": 2}}
]

所对应的实体类:

package com.lili.json;import java.util.Arrays;
import java.util.List;/*** @author: QiJingJing* @create: 2021/7/18*/
public class Message {private long id;private String text;private List<Double> geo;private User user;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getText() {return text;}public void setText(String text) {this.text = text;}public List<Double> getGeo() {return geo;}public void setGeo(List<Double> geo) {this.geo = geo;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Overridepublic String toString() {return "Message{" +"id=" + id +", text='" + text + '\'' +", geo=" + geo +", user=" + user +'}';}
}
package com.lili.json;/*** @author: QiJingJing* @create: 2021/7/18*/
public class User {private String name;private int followers_count;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getFollowers_count() {return followers_count;}public void setFollowers_count(int followers_count) {this.followers_count = followers_count;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", followers_count=" + followers_count +'}';}}

编写代码解析复杂JSON:

public class JsonTest {/*** 使用JsonReader解析一个复杂的json*/@Testpublic void parseJsonMessages() throws IOException {InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/lili/json/message.json");InputStreamReader reader = new InputStreamReader(is);JsonReader jsonReader = new JsonReader(reader);List<Message> list = new ArrayList<>();jsonReader.beginArray();while (jsonReader.hasNext()){list.add(parseJsonMessage(jsonReader));}jsonReader.endArray();System.out.println(Arrays.toString(list.toArray()));}/*** 解析message类的方法*/private Message parseJsonMessage(JsonReader reader) throws IOException {Message message = null;reader.beginObject();message = new Message();while (reader.hasNext()) {String name = reader.nextName();if("id".equals(name)){message.setId(reader.nextLong());}else if("text".equals(name)){message.setText(reader.nextString());}else if("geo".equals(name) && reader.peek() != JsonToken.NULL){message.setGeo(readGeo(reader));}else if("user".equals(name)){message.setUser(parseJsonUser(reader));}else {// 最好加上reader.skipValue();}}reader.endObject();return message;}/*** 解析geo*/private List<Double> readGeo(JsonReader reader) throws IOException {List<Double> list = new ArrayList<>();reader.beginArray();while (reader.hasNext()){list.add(reader.nextDouble());}reader.endArray();return list;}/*** 解析user类的方法*/public User parseJsonUser(JsonReader reader) throws IOException {User user = null;reader.beginObject();user = new User();while (reader.hasNext()) {String name = reader.nextName();if("name".equals(name)){user.setName(reader.nextString());}else if("followers_count".equals(name)){user.setFollowers_count(reader.nextInt());}else{// 最好加上reader.skipValue();}}reader.endObject();return user;}
}

运行结果:

[Message{id=9223232323, text='How do I read a JSON stream in Java', geo=null, user=User{name='json_new', followers_count=41}}, Message{id=8787879686, text='@Json just use JsonReader', geo=[56.23212323, -1034.343], user=User{name='java nb', followers_count=2}}]

利用Gson工具类将一组JSON对象转换成对象集合,或把对象集合转化为JSON数组:

写一个新的JSON文件:

[{"firstName": "qi","lastName": "jing","email": "2811157481@qq.com"},{"firstName": "yang","lastName": "li","email": "2811157481@qq.com"}
]

对应实体类:

package com.lili.json;/*** @author: QiJingJing* @create: 2021/7/18*/
public class Name {private String firstName;private String lastName;private String email;public Name() {}public Name(String firstName, String lastName, String email) {this.firstName = firstName;this.lastName = lastName;this.email = email;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "Name{" +"firstName='" + firstName + '\'' +", lastName='" + lastName + '\'' +", email='" + email + '\'' +'}';}
}

编写测试代码:

/*** 把一组JSON对象转换成对象集合,或把对象集合转化为JSON数组*/
@Test
public void gson2(){Gson gson = new Gson();InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/lili/json/name.json");assert resourceAsStream != null;InputStreamReader reader = new InputStreamReader(resourceAsStream);TypeToken<List<Name>> typeToken = new TypeToken<List<Name>>(){};List<Name> list = gson.fromJson(reader, typeToken.getType());System.out.println(list);// 再转回去String json = gson.toJson(list, typeToken.getType());System.out.println(json);
}

对象集合和json数据如下:

[Name{firstName='qi', lastName='jing', email='2811157481@qq.com'}, Name{firstName='yang', lastName='li', email='2811157481@qq.com'}]
[{"firstName":"qi","lastName":"jing","email":"2811157481@qq.com"},{"firstName":"yang","lastName":"li","email":"2811157481@qq.com"}]

GSON的用法(处理对象和JSON的相互转化)相关推荐

  1. Gson案例:Java对象与JSON字符串相互转换

    Gson案例:Java对象与JSON字符串相互转换 一.Gson概述 Gson是一个Java类库,可将Java对象转换为相应的JSON形式,也可以将JSON字符串转换为对应的Java对象.Gson是一 ...

  2. GSON 循环引用的对象转为 JSON 造成栈溢出

    对象转 JSON 可能引发栈溢出的异常,一般是因为对象中的循环引用引起不断递归. 常见的作法就是: 换一种 JSON 的序列化工具,比如 fastjson 默认支持消除对同一对象循环引用 transi ...

  3. JS对象和JSON字符串相互转化总结

    在web开发中,一般情况下需要前端和服务器的交换数据,我们一般使用JSON来完成数据的传输,JavaScript操作的对象是一般是变量:因此我们需要将JSON字符串转换为JS变量,下面总结JS对象和J ...

  4. FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  5. gson转对象变成null_FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    转 https://blog.csdn.net/moneyshi/article/details/51830329 Java对象转换Json的细节处理 前言 Java对象在转json的时候,如果对象里 ...

  6. 使用Gson将Java对象转换为JSON

    Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象. Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方 ...

  7. Gson解析json对象,json数组

    String jsonStr 为 {    "error": 0,    "msg": "成功",    "result" ...

  8. 对象 和 json 互转 四种方式 json-lib、Gson、FastJson、Jackson

    文章目录 一. json-lib 二. Google的Gson 1.简介 2. 配置步骤 1. MAVEN 依赖引入 2. gsonUtil 工具类 3. 排除不要序列化的熟悉注解类 Exclude ...

  9. JavaScript对象、JSON对象、JSON字符串的区别

    一.首先看下什么是JSON JSON:JavaScript Object Natation,JavaScript对象的表现形式,已经发展成一种轻量级的数据交换格式. JavaScript对象的表现形式 ...

  10. fastjson map转json_Java对象转JSON咋这么头疼?不!那是你还没使用Fastjson

    前言 测试同学在写测试用例的时候,每个测试用例必须包含预期结果.而对于手工测试而言,执行测试时,预期结果基本上都是人工完成.而对于自动化用例的执行,就要借助于自动化断言,一般是借助于程序实现.以接口测 ...

最新文章

  1. 浅谈用原生 JS 模仿个Promise 的实现
  2. python 用两个栈实现一个队列
  3. Caffe常用层参数介绍
  4. 【转】在.Net中关于AOP的实现
  5. 太阳能电池基本特性实验报告_太阳能电池基本特性研究实验报告的数据处理Ini怎么?太阳能电池基 爱问知识人...
  6. Centos下磁盘管理
  7. java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
  8. 二叉树数组求前中后序遍历
  9. win10系统自动打开代理服务器的解决方法
  10. ubuntu 18改MAC桌面
  11. English语法_人称代词 - It
  12. 中国第一大微商TST涉嫌传销案听证会结束
  13. 经典算法题型(二):二维数组(平面地图)的递归操作
  14. persevere的用法_努力奋斗的英文短语 努力的英文意思是
  15. 笔记本外接显示屏,FPS下降严重的解决办法
  16. Windows 10 (Win10) 将绿色免安装软件,添加到动态磁贴
  17. group by 取每组最新的一条
  18. IPV6重复地址检测(DAD)
  19. 适用于2019的6个最佳WordPress社区插件
  20. ipad极品飞车无限狂飙无法连接服务器,极品飞车:无极限赛车总是显示无法连接网络...

热门文章

  1. union union all
  2. 八段锦是一种不错的养生运动
  3. android camera textureview,Android SDK – camera2 – 在TextureView上绘制矩...
  4. MySQL5.7的下载以及安装
  5. JVM监控及诊断工具GUI篇之Arthas(五):其他指令
  6. 常见排序算法之选择排序
  7. mergeBeanDefinition原理
  8. React Web开发中常见的异常提示以及解决方案
  9. 对于局部变量,text、ntext 和 image 数据类型无效
  10. 多表无关联查询(范围查询):查询某个人属于哪个工资区间