详解Java中JSON数据的生成与解析
作者:人生技术初学者 发布时间:2022-02-21 22:54:44
一、什么是JSON
JSON: JavaScript Object Notation JS对象简谱,是一种类似于XML的语言。相比于XML,它更小、更快、更易解析。主要用于项目前端和Server的网络数据传输。
二、JSON的语法
对象
一个对象,由一个大括号表示{},{}中通过一个个的键值对来描述对象的属性
注意:
键与值之间使用冒号连接,多个键值对之间使用逗号分隔。
键值对的键,应使用引号引住(通常Java解析时,键不使用引号会报错,而JS能正确解析);键值对的值,可以是JS中的任意数据类型
格式:
{
键1:值1,
键2:值2,
.
.
}
案例:使用JSON描述一本书,属性: 书名、简介
{
"name":"自控力",
"info":"如何提升自己的自控力"
}
数组格式
[]表示数组,在JSON中,数组可以与对象互相嵌套
格式:
[元素1,元素2,…]
案例:
{
“name”:[“自控力”,“浪潮之巅”]
}
三、JSON与Java对象之间的相互转换
JSON和Java对象之间的转换目前主要是通过引用Gson类库或者FastJson类库来进行操作
Gson
Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Java对象转换为JSON字符串,也可以将一个JSON字符串转换为一个Java对象。
将Java对象转换为JSON字符串 步骤:
1.引入JAR包
2.在需要转换的JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(需要转换的对象);
案例:
编写一个Book对象类
public class Book {
private String id;
private String name;
private String info;
@Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", info='" + info + '\'' +
'}';
}
public Book(String id, String name, String info) {
this.id = id;
this.name = name;
this.info = info;
}
public Book() {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Book book = (Book) o;
return Objects.equals(id, book.id) &&
Objects.equals(name, book.name) &&
Objects.equals(info, book.info);
}
@Override
public int hashCode() {
return Objects.hash(id, name, info);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
将Book对象转化为JSON
public class toJSON {
public static void main(String[] args) {
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换
Book b = new Book("10","自控力","如何提升自控力");
String s = g.toJson(b);
System.out.println(s);
}
}
输出结过为:
{"id":"10","name":"自控力","info":"如何提升自控力"}
将JSON字符串转换为一个Java对象
1.引入JAR包
2.在需要转换的Java对象的位置编写如下代码即可:
对象=new Gson().fromJson(JSON字符串,对象类型.class);
注意:
当转换的Java对象不包含JSON字符串中的属性时,转换过程中可能会出现属性丢失的情况。解决办法:转换为Map集合
案例:
将JSON字符串转换为Book对象
public class toBook {
public static void main(String[] args) {
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换 : {"id":"10","name":"自控力","info":"如何提升自控力"}
Book b = g.fromJson("{\"id\":\"10\",\"name\":\"自控力\",\"info\":\"如何提升自控力\"}", Book.class);
System.out.println(b.getId());
}
}
结果:
10
将JSON字符串转换为Map集合
注意:
当JSON中存在数组格式的键值对时,数组格式的键值对转换为最终结果为List类型
public class toMap{
public static void main(String[] args) {
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换
HashMap data = g.fromJson("{\"id\":\"10\",\"name\":\"自控力\",\"info\":\"如何提升自控力\", \"page\":[\"时间管控方式\",\"自我暗示法\"]}"HashMap.class);
List page=(List) data.get("page");
System.out.println(data.get("id"));
System.out.println(page.get("1"));
}
}
运行结果:
10
时间管控方式
FastJson
FastJson是阿里提供的用来在Java对象和JSON数据之间进行映射的Java类库。
将Java对象转换为JSON字符串
步骤:
1.引入JAR包
2.在需要转换的JSON字符串的位置编写如下代码即可:
相比Gson FastJson不需要创建新的对象
String json = JSON.toJSONString(需要转换的对象);
将JSON字符串转换为一个Java对象
步骤:
1.引入JAR包
2.在需要转换的JSON字符串的位置编写如下代码即可:
转对象
String json = JSON.parseObject(JSON字符串,类型.class);
转List
List<类型>list=JSON.parseArray(JSON字符串,类型.class);
四、总结:
JSON对于移动设备来说,尤其对于网络环境较差和流量限制的情况下,相对于XML格式的数据传输会更节省流量,传输效率更高。
参考
JSON的解析方式
来源:https://blog.csdn.net/weixin_43054110/article/details/117910188


猜你喜欢
- 1、声明一个测试对象import java.time.LocalDate;import java.util.List;import lomb
- 本文实例为大家分享了WebView实现文件下载功能的具体代码,供大家参考,具体内容如下本节引言本节给大家介绍的是WebView下载文件的知识
- 实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个
- 本文为大家分享了Android网络连接判断与相关处理,供大家参考,具体内容如下获取网络信息需要在AndroidManifest.xml文件中
- 前言对象关系映射(ORM)已经被使用了很长时间,以解决在编程过程中对象模型与数据模型在关系数据库中不匹配的问题。Dapper是由Stack
- 前几天一同学项目中的某个功能需要ListView+EditText来实现,希望我给他写个Demo,自己就随手写了一个小的Demo。后来想了想
- 听老师说,在以后的学习中大部分的异常都是空指针异常。所以抽点打游戏的时间来查询一下什么是空指针异常一:空指针异常产生的主要原因如下:(1)当
- spring boot 作为微服务的便捷框架,在错误页面处理上也有一些新的处理,不同于之前的spring mvc 500的页面处理是比较简单
- 本文实例为大家分享了Java生成6位随机字符串的实现代码,具体内容如下package com.amos.tools;import java.
- 下图是《Unity Shader 入门精要》一书中的渲染流程图;ApplicationStage阶段:准备场景信息(视景体,摄像机参数)、粗
- 废话不多说,直接给大家贴代码了,具体代码如下所示:package com.luo.wctweb.util; import java.awt
- 基本数据类型变量就是用来储存值而保留的内存位置。这就意味着当你创建一个变量时就会在内存中占用一定的空间。基于变量的数据类型,操作系统会进行内
- 一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如
- 1、采用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。sp
- Java File类 mkdir 不能创建多层目录File f = new File("/home/jp/Upload"
- Android-Room数据库(介绍)前言在SQLite数据库中,我们可以指定对象之间的关系,因此我们可以将一个或多个对象与一个或多个其他对
- 第三篇来的好晚啊,上一篇说了如何向服务器推送信息,这一篇我们看看如
- 使用python和java实现数独游戏,有比较才有收获哦。1、Python版#--coding:utf-8--import ra
- 本文实例为大家分享了Android实现仪表盘效果的具体代码,供大家参考,具体内容如下仪表盘效果,圆弧可变色,效果图如下:通过自定义view实
- 本文实例讲述了C#遍历操作系统下所有驱动器的方法。分享给大家供大家参考。具体分析如下:这里先通过DriveInfo类的GetDrivers方