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. 【linux】Valgrind工具集详解(一):简介
  2. 管理者如何打造一个有执行力的团队?
  3. linux shell rman删除归档_Oracle备份恢复必会--rman迁移,附实验步骤介绍
  4. C语言程序设计第一节课作业
  5. 一文看懂Python(六)-----类与对象篇
  6. 三十四、深入Vue.js语法(中篇)
  7. oracle 11 导入到 10,oracle11g导入到10g
  8. Java 8:使用交替接口公开的类型安全地图生成器
  9. WF4.0 基础篇 (二十九) WorkflowInspectionServices
  10. NULL值的处理注意不同数据库区别
  11. 了解如何高速嵌入式?
  12. 基于情感词典的文本情感分析(附代码)
  13. 【伸手党福利】投影仪初学者入门——投影亮度及幕布选择——从入门到精通
  14. linux安装CAS认证服务器
  15. 灰度决策--如何解决棘手复杂问题
  16. 如果你热爱编码,就应该少写代码
  17. ImageLoader加载图片闪烁
  18. cdn连接失败是什么意思_CDN经常连接失败的原因有哪些?
  19. 80后十大烦恼的特征
  20. 【CSS】用CSS画太极图

热门文章

  1. 谁能告诉我war包的作用及使用方法。。。。。。
  2. ZOJ 3432 Find the Lost Sock (水题)
  3. 使用 Spring 2.5 基于注解驱动的 Spring MVC
  4. UML学习系统(一)
  5. 【Spring-tx】spring事务和mybatis的联系
  6. Spring搭建本地源码调试环境
  7. MyCat分片规则之ASCII码取模范围分片
  8. Java集合Collection之实现原理解读(HashSet)
  9. hasOwnProperty()方法与in操作符
  10. java 静态导入 import static