JSON解析看这一篇就够了

news2025/1/12 17:17:01

目录

文章目录

    • @[toc]
  • 一、JSON是什么 ( ̄︶ ̄)↗
      • 总而言之:
  • 二、为什么要用JSON
  • 三、不同的JSON解析方式
    • 3.1 gson和[fastjson](https://so.csdn.net/so/search?q=fastjson&spm=1001.2101.3001.7020)
      • 简而言之
    • 3.2 gson案例
      • 3.2.1 用gson,bean转json
      • 案例一: toJson()
      • 案例二: toJson() 匿名创建法
      • 3.2.2 用gson对json内容解析
      • 案例一:fromJson() -解析的json内容,(为对象时)
      • 案例二:fromJson() -解析的json内容包含数组时
      • 结论
      • 鉴于结论2
    • 3.3 fastjson案例
      • 3.3.1 案例一:toJSONString() -将对象转换成json格式
      • 3.3.2 案例二:patseObject()
      • 3.3.3 案例三:当转换对象包含数组时
      • 结果:
  • 四、附件 ~(~ ̄▽ ̄)~
    • 4.1 gson的官方指导文档与优秀翻译
    • 4.2 gson的地址
    • 4.3 json的地址

一、JSON是什么 ( ̄︶ ̄)↗

1、JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

2、它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

总而言之:

JSON是一种前后端交流的语言格式,它使得不同的语言的内容可以相互转换和理解。

并且还是未来开发前后端传输的主要数据格式。

好处:

​ 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

二、为什么要用JSON

理由有4:

  1. 省空间,基本没什么浪费的字符,因此传输速率较快。虽然JSON类似于XML,但是他却比XML更小、更快、更容易解析。
  2. JSON语法简单,很容易理解,而且大部分公司都使用的JSON。
  3. 与语言无关,支持度非常可观,任何语言都能轻松用它进行格式转换。
  4. 类型安全,值是有类型的,比如整数、字符串、布尔等

三、不同的JSON解析方式

3.1 gson和fastjson

​ 3.1.1 gson是什么

​ Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。

简而言之

​ 就是谷歌开发的一个可以将java对象转换为json格式,然后又将json格式转化为java对象的一个工具。

​ 3.1.2 fastjson是什么

FastJson是啊里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。

​ 3.1.3 区别与特性

  1. gson功能全面,但是相较于fastjson性能上却有所差距
  2. FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库,但是却容易在复杂类型的转换上出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。

​ 3.1.4 适用场景

  1. 如果只是功能要求,没有性能要求,可以使用google的Gson
  2. 如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean

3.2 gson案例

注意: 以下的所有案例,都需要先创建一个BOOK类

属性有:

img

方法有:

  1. ​ 所有的get(),set()方法
  2. ​ hashCode(),equals()方法
  3. ​ 全参构造方法
  4. ​ toString()方法

3.2.1 用gson,bean转json

案例一: toJson()

 //谷歌的方式



        //1.    创建一个Gson对象



        Gson g = new Gson();



        //2.    转换



        Book b = new Book("99","牛顿的苹果","牛顿在树下被苹果砸到");



        String s = g.toJson(b);



        System.out.println(s);

结果

{“id”:“99”,“name”:“牛顿的苹果”,“info”:“牛顿在树下被苹果砸到”}

案例二: toJson() 匿名创建法

//1.    创建一个Gson对象



        //2.    转换



        Book b = new Book("99","牛顿的苹果","牛顿在树下被苹果砸到");



        String s =new Gson().toJson(b);



        System.out.println(s);

结果:

{“id”:“99”,“name”:“牛顿的苹果”,“info”:“牛顿在树下被苹果砸到”}

3.2.2 用gson对json内容解析

案例一:fromJson() -解析的json内容,(为对象时)

//1.    创建一个Gson对象



        Gson g = new Gson();



        //2.    转换json后输出  ,第一个参数传的是json字符串   ,第二个参数是要转换成什么样的类型



        Book b = g.fromJson("{\"id\":\"99\",\"name\":\"牛顿的苹果\",\"info\":\"牛顿在树下被苹果砸到\"}",Book.class);



        System.out.println(b.getId());


//匿名对象



//1.    创建一个Gson对象



        //2.    转换json后输出  ,第一个参数传的是json字符串   ,第二个参数是要转换成什么样的类型



        Book b2 = new Gson().fromJson("{\"id\":\"99\",\"name\":\"我的世界观\",\"info\":\"爱因斯坦著作集\"}",Book.class);



        System.out.println(b2.getId());

案例二:fromJson() -解析的json内容包含数组时

 //1.    创建一个Gson对象



        //2.    转换输出  {"id":"99","name":"牛顿的苹果","info":"牛顿在树下被苹果砸到","page":["锄禾日当午","汗滴禾下土","嘿嘿嘿"]}  ,第一个参数传的是json字符串   ,第二个参数是要转换成什么样的类型



        HashMap data = new Gson().fromJson("{\"id\":\"99\",\"name\":\"牛顿的苹果\",\"info\":\"牛顿在树下被苹果砸到\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\",\"嘿嘿嘿\"]}", HashMap.class);



        System.out.println(data.get("page").getClass());



        //.getClass()获取类型,得到的类型是ArrayList。

结论

1、普通情况、匿名情况 、对象里包含数组,也都是按照toString里的格式,亦或是下标进行输出的

2、但是,当转换的对象里面包含数组部分时,数组内容就会被自动转换成List集合

鉴于结论2

我们可以直接,将数组强转为 List 集合进行输出

 //1.    创建一个Gson对象



        //2.    转换json后输出  {"id":"99","name":"牛顿的苹果","info":"牛顿在树下被苹果砸到","page":["锄禾日当午","汗滴禾下土","嘿嘿嘿"]}  ,第一个参数传的是json字符串   ,第二个参数是要转换成什么样的类型



        HashMap data = new Gson().fromJson("{\"id\":\"99\",\"name\":\"牛顿的苹果\",\"info\":\"牛顿在树下被苹果砸到\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\",\"嘿嘿嘿\"]}", HashMap.class);



        List page = (List) data.get("page");



        System.out.println(page.get(1));

3.3 fastjson案例

3.3.1 案例一:toJSONString() -将对象转换成json格式

Book b = new Book("66","唐诗三百首","床前明月光");



        //1. 转换



        String json = JSON.toJSONString(b);



        System.out.println(json);

由于输出结果和上面大同小异,就不放出结果了哦

3.3.2 案例二:patseObject()

//1. 转换  {"id":"66","info":"床前明月光","name":"唐诗三百首"}



        Book b = JSON.parseObject("{\"id\":\"1002\",\"info\":\"床前明月光\",\"name\":\"唐诗三百首\"}",Book.class);



        System.out.println(b);

3.3.3 案例三:当转换对象包含数组时

注意:

​ 在此处,阿里的fastjson,和谷歌的gson有所区别:

​ fastjson需要使用到 parseArray()方法 ,gson则没有改变

parseArray():

/1. 转换  :["一二三四五","幸福生活奋斗来","三四五"]



        List<String> s = JSON.parseArray("[\"一二三四五\",\"幸福生活奋斗来\",\"三四五\"]",String.class);



        //List<String> List集合里面是字符串



        //结果是一个List集合



        //打印一下1下标



        System.out.println(s.get(1));

结果:

幸福生活奋斗来

四、附件 ~(~ ̄▽ ̄)~

4.1 gson的官方指导文档与优秀翻译

官方文档:

gson/UserGuide.md at master · google/gson · GitHub

优秀翻译:

http://www.javacreed.com/

4.2 gson的地址

Gitee 极速下载/gson

4.3 json的地址

Releases · alibaba/fastjson · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15.Servlet

目录 1.Servlet的日常开发 1.WebServlet(...此处填写资源路径) 1.那么什么时候Tomcat会启动失败&#xff1f; 2.响应体是文本内容&&字符集编码是uft-8 3.读取请求参数 4.资源的重定向&#xff08;redirect&#xff09; 2.面试问题&#xff1a;GET和POST有什么区…

代码随想录算法训练营三期 day 23 - 二叉树(9)

669. 修剪二叉搜索树 原文链接&#xff1a;669. 修剪二叉搜索树 题目链接&#xff1a;669. 修剪二叉搜索树 视频链接&#xff1a;669. 修剪二叉搜索树 在上图中我们发现结点 000 并不符合区间要求&#xff0c;那么将结点 000 的右孩子 结点 222 直接赋给 结点 333 的左孩子就…

Java设计模式 (1) —— Iterator迭代器模式

拿到这个话题&#xff0c;首先搞清楚&#xff1a;什么是迭代器&#xff1f; 大家都学过 for-i 循环&#xff0c;for-i循环的本质就是 通过i 或者 i-- &#xff0c;以实现 从数据的一端 一个一个地遍历数据元素&#xff0c;直到另一端的最后一个元素&#xff0c;将这里 i 的通用…

【Linux】基础IO —— 深入理解文件系统 | 软硬链接

&#x1f308;欢迎来到Linux专栏~~ 深入理解文件系统 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的…

安全需求和挑战

安全需求和挑战 从风险管理的角度讲&#xff0c;主要就是管理资产、威胁、脆弱性 和防护措施及其相关关系&#xff0c;最终保障云计算平台的持续安全&#xff0c;以及 其所支撑的业务的安全。 云计算平台是在传统 IT技术的基础上&#xff0c;增加了一个虚拟化 层&#xff0c;并…

大数据之——Hive

目录1. Hive 基本概念1.1 什么是 Hive1.2 Hive 的优缺点1.2.1 优点1.2.2 缺点1.3 Hive 架构原理2. Hive 安装2.1 Hive 安装地址2.2Hive 安装部署2.3MySQL 安装2.4 Hive 元数据配置到 MySQL2.4.1 拷贝驱动2.4.2 配置 Metastore 到 MySQL2.4.3 再次启动 Hive2.5 使用元数据服务的…

让学前端不再害怕英语单词(二)

写了本专栏的第一章让学前端不再害怕英语单词&#xff08;一&#xff09;后&#xff0c;反响热度还是比较高的&#xff0c;截止现在已经有20个收藏量了&#xff0c;所以趁热打铁来更第二章 第一章我们简单的介绍了html&#xff0c;css和js的部分高频单词&#xff0c;因为html要…

S32K144的GPIO使用

程序初始化前线使用Components工具对时钟和GPIO进行配置&#xff0c;然后再main函数里面初始化。 时钟配置参考&#xff1a; S32K144之时钟配置 - 明明1109 - 博客园 (cnblogs.com) gpio配置 S32K SDK使用详解之PinSettings组件配置与使用详解(S32K1xx PORT 和GPIO模块)_嵌…

jdk1.8新特性简介

一、引言 jdk1.8出来已经一段时间了&#xff0c;现在1.9也已经出来了&#xff0c;但是很多公司&#xff08;我们公司也一样&#xff09;不太愿意升级到高版本的jdk&#xff0c;主要是有老的项目要维护&#xff0c;还有升级的话配套的框架也要升级&#xff0c;要考虑的细节事情太…

实训素材纯HTML+CSS代码 (教育主题 3页 )

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 家乡旅游景点 | 家乡民生变化 | 介绍自己的家乡 | 我的家乡 | 家乡主题 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结…

SpringMVC具体工作流程(保姆教学)

目录 文章目录[toc]一、SpingMVC的常用组件二、[SpringMVC](https://so.csdn.net/so/search?qSpringMVC&spm1001.2101.3001.7020)的工作流程一、SpingMVC的常用组件 1&#xff09;DispatcherServlet 是一种前端控制器&#xff0c;由框架提供。 作用&#xff1a;统一处理请…

基于Simulink宽带单基地雷达系统仿真(附源码)

目录 一、探索示例 1.1 收发器 1.2 信号处理子系统 1.3 渠道 1.4 目标子系统 二、结果和显示 三、总结 四、程序 本示例演示如何仿真宽带雷达系统。当雷达系统的带宽超过系统中心频率的5%时&#xff0c;通常被认为是宽带的。对于此示例&#xff0c;将使用 10% 的带宽。 …

智慧供应链解决方案-最新全套文件

智慧供应链解决方案-最新全套文件一、建设背景二、建设思路三、建设方案智慧供应链具有以下特点1、高度智能化2、全流程数字化3、信息系统互联互通四、获取 - 智慧供应链全套最新解决方案合集一、建设背景 智慧供应链是结合物联网技术和现代供应链管理的理论、方法和技术&…

ES6 入门教程 16 Reflect 16.1 概述

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程16 Reflect16.1 概述16 Reflect 16.1 概述 Reflect对象与Proxy对象一样&#xff0c;也是 ES6 为了操作对象而提供的新 API…

nodejs校园二手交易管理系统vue

本系统的设计主要是为给网上用户提供购物方便&#xff0c;所以应该完成以下目标&#xff1a; (1) 登录、注册。用户要想在交易系统中购买商品&#xff0c;就必须先登录系统。如果不是会员&#xff0c;就必须先注册&#xff0c;然后才能登录系统。 (2) 查找商品。用户可以查找自…

求程序段中++x或者x++的频度,时间复杂度、执行次数

以下程序段中"x"的执行频度&#xff1f; 频度就是执行次数for i:1 to n then;for j:1 to n then;x;i1时 内圈for执行n次...in时 内圈执行n次我的理解&#xff1a;外圈for从1到n&#xff0c;有效循环是n次&#xff0c;外圈每循环一次&#xff0c;内圈循环n次&#…

C语言源代码系列-管理系统之学生籍贯信息

往期文章分享点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过…

Python 3.11新功能:错误信息回溯

错误信息回溯 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 Python 3.11于2022 年 10 月 24 日发布。这个最新版本的 Python 速度更快&#xff0c;对用户更友好…

QT源码拾贝0-5(qimage和qpainter)

目录 0 qt源码查看方法 1. qimage.cpp中线程池使用方法 2. qpainter_p.h中SmallStack模板元结构体存放智能指针 3. qpainter.cpp的保存函数&#xff0c;状态对象赋值使用std::exchange函数 4. qpainter.cpp中获得类对象的方法 5. qpainter.cpp中QChar字节操作&…

代码随想录算法训练营三期 day 22 - 二叉树(8)

235. 二叉搜索树的最近公共祖先 原文链接&#xff1a;235. 二叉搜索树的最近公共祖先 题目链接&#xff1a;235. 二叉搜索树的最近公共祖先 在 有序树 里: 从上向下递归遍历&#xff0c;第一次遇到 curcurcur 结点的数值在 p,qp, qp,q 结点对应数值的闭区间中&#xff0c;那么…