• 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的使用总结相关推荐

  1. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  2. JAVA中JSON序列化和反序列化

    JAVA中JSON序列化和反序列化 1 FASTJSON的序列化和反序列化 1.1 主函数 1.2 自定义对象 2 GSON序列化和反序列化 2.1 主函数 2.2 自定义对象 总结 不同包序列化和反 ...

  3. java json的使用,java中json的使用

    String s = "src/text/multipleJson.js"; System.out.println(s); //将前台传来的json变成java中class对象 S ...

  4. java中json数据_Java中json的使用 解析json数据

    1.java提取json嵌套多层的数据 json数据为: { "res": [{ "name": "0", "text" ...

  5. java中json数据_java中的JSON对象的使用

    申明:没工作之前都没听过JSON,可能是自己太菜了.可能在前台AJAX接触到JSON,这几天要求在纯java的编程中,返回JSON字符串形式. 网上有两种解析JSON对象的jar包:JSON-lib. ...

  6. Java中json格式的字符串数组,list,json,map相互转换

    日常开发中免不了和json格式的字符串数组,list,json,map打交道,因此这篇文章的着重点就是这四者的相互转换 1.json格式的字符串数组转list String json = " ...

  7. [1138]java中json的使用和解析

    文章目录 1.创建json对象 1.1 创建JSONObject对象 1.2 创建JSONArray对象 2.解析json 2.1 官方json包解析 2.2 fastjson解析 2.3 jacks ...

  8. java中json重复数据结构_JS实现去除数组中重复json的方法示例

    本文实例讲述了JS实现去除数组中重复json的方法.分享给大家供大家参考,具体如下: var array = [{"name":"123"},{"na ...

  9. java中json重复数据结构_怎么将有JSON中有相同值放在一组?

    处理的json是文章的列表,其中有:日期.文章标题.连接.发布时间戳等对象. 做android app打算把同一天的文章都在viewpager的一页里,那应该怎么返回相应的数据结构呢? 我想过将日期做 ...

最新文章

  1. python解释器工作原理_Python解释器执行原理
  2. Java未被捕获的异常
  3. java getClass()
  4. oracle死锁的解决方法
  5. 一文彻底掌握二叉查找树
  6. 如何优雅的在手机上进行Python编程
  7. FTPSFTP的基本命令
  8. 面试题:用两个栈实现一个队列 Java语言实现
  9. c语言数组的斐波那契数列
  10. 如何在Java中将Excel(XLSX)转换为Word(DOCX)
  11. App隐私合规注意事项和相关材料
  12. 硬盘柱面损坏怎么办_硬盘坏道屏蔽工具,详细教您如何修复硬盘坏道
  13. Windows10无法启动windows安全中心服务怎么办?
  14. Grub4dos安装和启动完全指南
  15. USB转RS485代替PC/PPI通讯电缆
  16. Web负载均衡的几种实现方式
  17. 如何修改CAD制图时光标尺寸大小?
  18. 最新算法只需一块GPU,就能算出蛋白质结构
  19. java并发编程艺术——基础篇
  20. 2022年双十一洗面奶选购指南

热门文章

  1. STEM教育课程的发展
  2. 古典密码——置换密码
  3. 一台服务器的可靠性能是,如何增强服务器内存的可靠性和可用性?
  4. 208 68使用计算机,SMT工艺试卷
  5. 【ceph】后端存储ObjectStore|BlueStore
  6. 让人怦然心动的效率便签
  7. 关于毕业论文那些事——如何给论文封面单元格文字两端完美对齐
  8. [爬虫]3.数据解析及应用 之 正则表达式【爬取网页所有图片】
  9. 设计模式系列之 工厂方法模式
  10. 英语口语练习系列-C14-常用片语