Java中JSON的使用总结
JSON
简介: JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式。
首先JSON具有三种表现格式
对象格式
通过与其他对象格式对比举例说明:
抛出问题 有一个类:书 属性:书名和简介,如何定义?
java:
class Book{
private String name;
private String info;
get/set...
}
Book b = new Book();
b.setName(“金苹果”);
b.setInfo(“种苹果”);
...
js:
var b = new Object();
b.name = "金苹果";
b.info = "种苹果";
XML:
<book>
<name>金苹果</name>
<info>种苹果</info>
</book>
JSON:
{
"name":"金苹果",
"info":"种苹果"
}
JSON中一个对象, 由一个大括号表示.括号中 描述对象的属性 . 通过键值对来描述对象的属性(可以理解为, 大括号中, 包含的是一个个的键值对.)
格式:键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解析.)
键值对的值, 可以是JS中的任意类型的数据。
数组格式
1.属性的值是一一对应的,一个属性的值可以包含多个信息(用[ ]括起包含的信息,可以理解为数组)
2:方括号中每个数据以json对象形式出现
3:每两个数据以逗号分隔(最后一个无需逗号)
遵守上面3点,便可形成一个json对象数组(及一个数组中,存储了多个json对象)
理解了上面两种基本的形式,我们就可以得出其他的数据形式,例如下面这个:
{"社团":"话剧社","部门":[{"ID": 1001, "name": "调研部", "info": "申请场地"},{"ID": 1002, "name": "外联部", "info": "拉赞助"},{"ID": 1003, "name": "宣传部", "age": "制作海报"}],"社团成立年限":"11年"
}
字符串格式
JSON字符串也是在平时开发中使用较多的,json字符串应满足以下条件:
1:它必须是一个字符串,由" "或者' '包裹数据,支持字符串的各种操作。
2:里面的数据格式应该要满足其中一个格式,可以是json对象,也可以是json对象数组或者是两种基本形式的组合变形。
在JSON格式中可以与对象互相嵌套 [元素1,元素2...]
举个例子:
{"name":"王路飞","age":22,"friends":["刘索隆","三治","娜美","乌索普",{"name":"弗兰奇","info":"是个改造人,拥有很炫酷的机甲"}],"opponents":{"name":"黑胡子","info":"四皇"}
}
正是因为有了这种数组跟对象互相嵌套的的格式,使得JSON的数据具有很高的括展性,但是有时候JSON数据会非常的多,程序员看的眼花缭乱的,很难用肉眼分清楚它的内部数据层次结构,这时候我们需要借助JSON校验格式化工具,为了下面方便对JSON数据格式进行我在这里提供一个网址https://www.sojson.com/simple_json.html
提供一个JSON格式的数据
{"code": "10000","charge": false,"remain": 0,"msg": "查询成功","result": {"garbage_info": [{"cate_name": "湿垃圾","city_id": "310000","city_name": "上海市","confidence": 0.780099213,"garbage_name": "坚果炒货","ps": "投放建议:容器与外包装为可回收物"}],"message": "success","status": 0}
}
然后对上面的数据进行校验的,当我们少打一个“}”时,右上边会有错误信息,下边的黑方格是出错的地方,改正之后,数据格数的层次会在右边按层级显示。(这里只举了一个错误发生的案例)
JSON做什么?
将Java中的对象 快速的转换为 JSON格式的字符串。
将JSON格式的字符串, 转换为Java的对象。
JSON与对象之间实现数据转化有两种方式,一种是谷歌公司提供的的Gson,一种是阿里公司提供的FastJson,下面对两种方法的使用分别展开介绍。
Gson
将对象转换为JSON字符串
转换JSON字符串的步骤:
首先去网上下载好需要导入的jar包 (可以去官网下载最新版本,也可以在csdn上收索下载链接)
1. 引入JAR包--gson-2.8.6.jar
2. 在需要转换JSON字符串的位置编写如下代码即可: String json = new Gson().toJSON(要转换的对象);(这个地方用的匿名内部类,主要就是节省内存空间,但是匿名内部类调用方法只能使用一次,当程序员想要再次通过此类调用方法时,要重新声明或者再次使用匿名内部类)
也可以走常规路径:
Gson gson = new Gson();
//2.创建图书对象
Book book = new Book("1001","数据库系统原理","数据库入门必修课程");
//3.将Book对象转换成JSON
String s = gson.toJson(book);
案例:
public class Book {private String id;//编号private String name;//书名private String 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;}public Book() {}public Book(String id, String name, String info) {this.id = id;this.name = name;this.info = info;}@Overridepublic String toString() {return "Book{" +"id='" + id + '\'' +", name='" + name + '\'' +", info='" + info + '\'' +'}';}
}
import com.google.gson.Gson;public class TestJSON {public static void main(String[] args) {//1.创建Gson对象Gson gson = new Gson();//2.创建图书对象Book book = new Book("1001","数据库系统原理","数据库入门必修课程");//3.将Book对象转换成JSONString s = gson.toJson(book);System.out.println(s);}
}
输出结果:
将JSON字符串转换为对象
引入JAR包后,在需要转换Java对象的位置, 编写如下代码: 对象 = new Gson().fromJson(JSON字符串,对象类型.class);
案例:
import com.google.gson.Gson;public class TestJSON {public static void main(String[] args) {//1.创建Gson对象Gson gson = new Gson();//{"id":"1001","name":"数据库系统原理","info":"数据库入门必修课程"}Book book = gson.fromJson("{\"id\":\"1001\",\"name\":\"数据库系统原理\",\"info\":\"数据库入门必修课程\"}", Book.class);System.out.println(book.getId());}
}
输出结果:
FastJson
将对象转换为JSON字符串
转换JSON字符串的步骤:
1. 引入JAR包-------fastjson-1.2.70.java
2. 在需要转换JSON字符串的位置编写如下代码即可: String json=JSON.toJSONString(要转换的对象);
将JSON字符串转换为对象
1. 引入JAR包-------fastjson-1.2.70.java
2. 在需要转换Java对象的位置, 编写如下代码:
对象类型 类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
或
数组类型 List<类型> list=JSON.parseArray(JSON字符串,类型.class);
案例:
public class Book {private String id;//编号private String name;//书名private String 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;}public Book() {}public Book(String id, String name, String info) {this.id = id;this.name = name;this.info = info;}@Overridepublic String toString() {return "Book{" +"id='" + id + '\'' +", name='" + name + '\'' +", info='" + info + '\'' +'}';}
}
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import java.util.List;
public class TestJSON {public static void main(String[] args) {System.out.println("--------fastJSON将对象转换成JOSN格式--------");Book book = new Book("10002","网络安全","一本介绍网络运行规则的书");//1.创建fastGson对象String json= JSON.toJSONString(book);System.out.println(json);System.out.println("--------fastJSON将JOSN格式转换成对象--------");String s="{\"id\":\"10002\",\"info\":\"一本介绍网络运行规则的书\",\"name\":\"网络安全\"}";// StringEscapeUtils.unescapeJava(String data);Book book1 = JSON.parseObject("{\"id\":\"10002\",\"info\":\"一本介绍网络运行规则的书\",\"name\":\"网络安全\"}", Book.class);//json字符串与javaBean之间的转换可以使用 TypeReference<T> 这个类Book book2 = JSON.parseObject(s,new TypeReference<Book>(){});// 数组类型 List<类型> list=JSON.parseArray(JSON字符串,类型.class);List<String> books = JSON.parseArray("[\"id\",\"10002\",\"info\",\"一本介绍网络运行规则的书\",\"name\",\"网络安全\"]",String.class);System.out.println(book1);book2.setName("HTML语法编程");System.out.println(book2.getName());System.out.println("book2修改后的变成:"+book2);for (String b: books) {System.out.print(b+"\t");}}
}
输出结果:
用数组类型时注意三个情况:
1.JSON.parseArray(JSON字符串,类型.class);中的字符串不再用“ { }”进行封装,而是用"[ ]"。
报错:
2.SON.parseArray(JSON字符串,类型.class);中字符串不再是键值对的形式,而是变成全部用“ , ”隔开。
将上面JSON.parseArray("[\"id\",\"10002\",\"info\",\"一本介绍网络运行规则的书\",\"name\",\"网络安全\"]",String.class);中字符串中从开始位置数到七位,然后将第七位的内容改成“ : ”,也就是\"id\":\"10002\",键值对的形式表示,会出第七个位置数据不合理的错误。
报错:
3.注意List传递的类型不要设置为类,最好使用String。
报错:
上一篇:XML的使用
下面推一篇XML和JSON的区别比较:
https://blog.csdn.net/qq21497936/article/details/92964914?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162193066616780262534804%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162193066616780262534804&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-2-92964914.pc_search_result_cache&utm_term=xml%E5%92%8Cjson%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187
Java中JSON的使用总结相关推荐
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- JAVA中JSON序列化和反序列化
JAVA中JSON序列化和反序列化 1 FASTJSON的序列化和反序列化 1.1 主函数 1.2 自定义对象 2 GSON序列化和反序列化 2.1 主函数 2.2 自定义对象 总结 不同包序列化和反 ...
- java json的使用,java中json的使用
String s = "src/text/multipleJson.js"; System.out.println(s); //将前台传来的json变成java中class对象 S ...
- java中json数据_Java中json的使用 解析json数据
1.java提取json嵌套多层的数据 json数据为: { "res": [{ "name": "0", "text" ...
- java中json数据_java中的JSON对象的使用
申明:没工作之前都没听过JSON,可能是自己太菜了.可能在前台AJAX接触到JSON,这几天要求在纯java的编程中,返回JSON字符串形式. 网上有两种解析JSON对象的jar包:JSON-lib. ...
- Java中json格式的字符串数组,list,json,map相互转换
日常开发中免不了和json格式的字符串数组,list,json,map打交道,因此这篇文章的着重点就是这四者的相互转换 1.json格式的字符串数组转list String json = " ...
- [1138]java中json的使用和解析
文章目录 1.创建json对象 1.1 创建JSONObject对象 1.2 创建JSONArray对象 2.解析json 2.1 官方json包解析 2.2 fastjson解析 2.3 jacks ...
- java中json重复数据结构_JS实现去除数组中重复json的方法示例
本文实例讲述了JS实现去除数组中重复json的方法.分享给大家供大家参考,具体如下: var array = [{"name":"123"},{"na ...
- java中json重复数据结构_怎么将有JSON中有相同值放在一组?
处理的json是文章的列表,其中有:日期.文章标题.连接.发布时间戳等对象. 做android app打算把同一天的文章都在viewpager的一页里,那应该怎么返回相应的数据结构呢? 我想过将日期做 ...
最新文章
- python解释器工作原理_Python解释器执行原理
- Java未被捕获的异常
- java getClass()
- oracle死锁的解决方法
- 一文彻底掌握二叉查找树
- 如何优雅的在手机上进行Python编程
- FTPSFTP的基本命令
- 面试题:用两个栈实现一个队列 Java语言实现
- c语言数组的斐波那契数列
- 如何在Java中将Excel(XLSX)转换为Word(DOCX)
- App隐私合规注意事项和相关材料
- 硬盘柱面损坏怎么办_硬盘坏道屏蔽工具,详细教您如何修复硬盘坏道
- Windows10无法启动windows安全中心服务怎么办?
- Grub4dos安装和启动完全指南
- USB转RS485代替PC/PPI通讯电缆
- Web负载均衡的几种实现方式
- 如何修改CAD制图时光标尺寸大小?
- 最新算法只需一块GPU,就能算出蛋白质结构
- java并发编程艺术——基础篇
- 2022年双十一洗面奶选购指南