JSON语法、序列化/反序列化、(JS、JSON、Java对象间转换)、fastjson库、JS内置对象JSON

目录

一、JSON基础。

(1)什么是JSON?

(2)JSON对象语法。

1、数据结构。

2、键与值的格式。

3、JSON对象在线解析与格式验证网址。

4、JSON对象格式的完整示例。

二、序列化与反序列化。

(1)序列化。(Serialization)

1、定义。

2、常见序列化格式。

(2)反序列化。(Deserialization)

1、定义。

2、应用场景。

三、JSON对象与JS对象间转换。

(1)stringify():js对象->json字符串。

(2)stringify():json字符串->js对象。

四、JSON对象与Java对象间转换。

(1)序列化。(java->json)

(2)反序列化。(json->java)

(3)使用fastjson库操作。

(4)fastjson库涉及的核心类。

JSON。

JSONObject。

JSONArray。


一、JSON基础。

(1)什么是JSON?
  • JSON(JavaScript Object Notation,JavaScript对象表示法)。JSON是一种轻量级的数据交换格式
  • 它是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。


  • JSON独立于语言设计,很多编程语言都支持JSON格式的数据交换(如:Java)。JSON是一种常用的数据格式,在电子数据交换中有多种用途,包括与服务器之间的Web应用程序的数据交换
  • 其简洁和清晰的层次结构有效地提升了网络传输效率,使其成为理想的数据交换语言。
  • 其文件通常使用扩展名.json。

  • 注:本篇文章是以JSONJava编程语言相结合进行学习。
(2)JSON对象语法。
1、数据结构。
  • 对象(object)。一个无序的键值对集合
  • 使用花括号"{}"包围。
  • 每个键值对由一个键和一个值组成,键和值之间用冒号":"分隔,键值对之间用逗号","分隔。

2、键与值的格式。
  • 键必须是字符串,并且用双引号""包围
  • 可以是字符串数值布尔值数组对象null


  • 数组(Array)一个有序的值的集合。

  • 使用方括号"[]"包围。值之间用逗号","分隔。如:["apple","banana", "cherry"]。


  • 对象的写法。注意"{}"的位置。


3、JSON对象在线解析与格式验证网址。
  • https://www.json.cn/#google_vignette(谷歌浏览器)
  • https://www.json.cn/jsononline/

4、JSON对象格式的完整示例。
  • 键名:用双引号""包围。
  • 键值:有数字、字符串、布尔值(逻辑值)、数组、对象、null。
{
"title":"JSON Example",
"author": {
"name":"suisuipingan",
"age": 20,
"year":"2024",
"isVerified":true
},
"tags":["json", "ajax", "example","java"],
"isPublished":false,
"comments": null
}

二、序列化与反序列化。

  • 序列化(Serialization)和反序列化(Deserialization)是计算机科学中处理数据存储传输的两个关键操作。
  • 它们允许数据结构在不同环境和平台之间移动,同时保持其结构和内容的完整性。

(1)序列化。(Serialization)
1、定义。
  • 序列化是将对象的状态信息转换为可以存储或传输的形式的数据格式的过程。
  • 这种形式通常是字符串或字节序列,可以保存在文件中或通过网络发送。

2、常见序列化格式。
  • JSON:上面已经介绍。它是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。
  • XML:可扩展标记语言,用于存储和传输数据,具有自描述性。(以前常用)
  • 二进制格式:通常比文本格式更紧凑,解析速度更快

(2)反序列化。(Deserialization)
1、定义。
  • 反序列化是序列化的逆过程。反序列化将序列化后的数据(如字符串或字节序列)转换回原始对象的过程。
2、应用场景。
  • 网络通信:在客户端和服务器之间传输数据时,经常需要将接收到的JSON格式的数据反序列化为Java对象,以便在程序中进一步处理
  • RESTful API数据交换:在构建RESTful API时,经常需要将Java对象序列化为JSON格式发送给客户端,或从客户端接收JSON数据并转换为Java对象。

  • 处理JSON数据:使用如Jackson、Gson、Fastjson等库,将JSON字符串反序列化为Java对象,以便在Java程序中使用这些数据。

三、JSON对象与JS对象间转换。

  • ES5,全称 ECMAScript 5,是 JavaScript 语言规范的一个版本。
  • 在ES5中引用了JSON全局对象(内置对象JSON)。该对象有两个常用的操作JSON对象的方法。

(1)stringify():js对象->json字符串。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>js与json互转</title>
</head>
<body>
<script>
    //JavaScript对象
    const jsObj = {name:"zhangsan",age:18,sex:"男"}
    /*使用JavaScript提供的JSON内置对象的stringify()方法*/
    //stringify():将js对象转换为JSON格式字符串
    var jsonStr = JSON.stringify(jsObj);
    alert(jsonStr)

</script>
</body>
</html>
(2)stringify():json字符串->js对象。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>js与json互转</title>
</head>
<body>
<script>
    //json格式的字符串
    const jsStr = '{"name":"zhangsan","age":18,"sex":"男"}'
    /*使用JavaScript提供的JSON内置对象的parse()方法*/
    //parse():将JSON格式字符串转换为js对象
    const jsObj= JSON.parse(jsStr);
    //因为是对象,直接输出会显示Object
    alert(jsObj)

</script>
</body>
</html>


  • 可以通过对象.属性拿取JavaScript对象的属性值。


四、JSON对象与Java对象间转换。

(1)序列化。(java->json)
  • 在Java中,将对象转换为JSON格式的过程被称为“序列化”。
  • 具体地说,是对象的JSON序列化(Java对象——>JSON格式字符串)

(2)反序列化。(json->java)
  • 在Java中,将JSON格式字符串转换为Java对象的过程被称为“反序列化”。
  • 具体地说,是JSON到Java对象的反序列化(Java对象——>JSON格式字符串)
  • 这个过程涉及到将JSON格式的字符串解析并映射到Java对象的状态中,从而重建原始对象。

(3)使用fastjson库操作。
  • fastjson是阿里巴巴开发的高性能开源Java-JSON解析库。它提供了将 Java 对象转换为 JSON 字符串(序列化)以及将 JSON 字符串转换为 Java 对象(反序列化)的功能。
  • fastjson广泛应用于各种JavaWeb应用、移动应用以及大数据场景。具有稳定、高效、易用等特点。

  • 前往Maven中央仓库:https://mvnrepository.com/。


  • 找到jar按钮并下载。复制到项目中的lib目录下。


  • web目录下的lib目录。


(4)fastjson库涉及的核心类。



  • JSON。
  • parseObject():JSON格式的字符串解析成Java对象(JSONObject对象)。
  • toJSONString():Java对象->json格式字符串。


  • JSONObject。
  • JSONObject在 Fastjson 库中是一个非常重要的类,它代表了一个 JSON 对象。其功能类似于 Java 中的Map,但它专门用于处理 JSON 数据。


  • JSONArray。
  • JSONArray是 Fastjson 库中的一个类,它代表了一个 JSON 数组。功能类似于Java中的List,但它专门用于处理 JSON 数据。
  • JSONArray存储有序的值集合。可以包含不同类型的元素,如字符串数字布尔值null值,以及其它如:JSONObject对象JSONArray对象。和Java中的集合很类似。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#中的string操作详解-截取、分割、连接、替换等

在C#中&#xff0c;string 类提供了许多用于操作字符串的方法&#xff0c;包括截取、分隔和连接等。以下是一些常用字符串操作的介绍和实例&#xff1a; 1. 截取字符串 Substring 方法 用于从字符串中截取子字符串。 语法&#xff1a; //从startIndex开始截取&#xff0c;…

STOP: 0x0000007B

STOP: 0x0000007B 安装电脑&#xff0c;提示出错&#xff0c;硬盘模型错误&#xff0c;SATA模式3种&#xff1a;AHCI、IDE、RAID 高级这个图好像漏了&#xff0c;下次补吧&#xff0c;就在高级里面硬盘模式修改下

echarts自定义仪表盘样式及一些属性了解

目录 一、自定义仪表盘 1.仪表盘相关 2.常用属性 &#xff08;1&#xff09;series &#xff08;2&#xff09;graphic 二、自定义仪表盘 1.基本仪表盘绘制 2.分析结构&#xff0c;分别绘制 &#xff08;1&#xff09;自定义形状 &#xff08;2&#xff09;仪表盘各部…

图神经网络代码学习—基本使用与分类任务

初步接触图神经网络代码 环境配置 对于在多目标跟踪中应用图匹配网络&#xff0c;需要学习使用GNN图神经网络&#xff0c;对于图神经网络的实现需要学习使用一下库和项目来进行实践。 PyG&#xff08;PyTorch Geometric&#xff09;是一个建立在 PyTorch 基础上的库&#xf…

操作系统:死锁与饥饿

目录 死锁概念 饥饿与饿死概念 饥饿和死锁对比 死锁类型 死锁条件&#xff08;Coffman条件&#xff09; 死锁恢复方法 死锁避免 安全状态与安全进程序列&#xff1a; 银行家算法&#xff1a; 死锁检测时机&#xff08;了解&#xff09;&#xff1a; 死锁检测 死锁案…

SkyWalking Helm Chart 4.7.0 安装、配置

https://skywalking.apache.org/events/release-apache-skywalking-kubernetes-helm-chart-4.7.0/https://github.com/apache/skywalking-helm/tree/v4.7.0https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/简介 skywalking 是分布式系统的 APM(Applicat…

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题 这篇文章是接我cocos专栏的上一篇文章继续写的&#xff0c;我上一篇文章写的是 cocos 开发触摸屏项目&#xff0c;需要嵌入一个网页用来展示&#xff0c;最后通过 electron 打包成 exe 程序&#xff0c;而且网页里面…

嵌入式Linux应用开发中CAN通信实现

14.1 CAN介绍 14.1.1 CAN是什么? CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速…

Grafana功能菜单介绍

Grafana的功能菜单设计为侧边栏(sidebar)形式,可以折叠隐藏,便于我们更加专注数据的可视化。现将菜单栏各项功能进行编号讲解,如下图所示:① Grafana Logo 在这里插入图片描述 点击Grafana的logo,无论当前处于哪个页面,都会跳转回Home Page(主页)。② 新建与导入用于…

MVC基础——市场管理系统(二)

文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…

前端 mp4 视频改成 m3u8 流模式

前端 mp4 视频改成 m3u8 流模式 mp4 视频的问题 1、mp4 视频通常对应一个文件&#xff0c;播放时需要加载全部文件&#xff0c;消耗网络资源。如果用户从中间某个时间访问&#xff0c;也会从头开始下载&#xff0c;浪费服务器性能。 2、mp4 视频文件容易被用户下载到本地。有…

爬虫基础之代理的基本原理

在做爬虫的过程中经常会遇到一种情况&#xff0c;就是爬虫最初是正常运行、正常抓取数据的&#xff0c;一切看起来都是那么美好&#xff0c;然而一杯茶的工夫就出现了错误&#xff0c;例如 403 Forbidden&#xff0c;这时打开网页一看&#xff0c;可能会看到“您的IP访问频率太…

如何将自己的PHP类库发布到composer仓库

将自己的 PHP 类库发布到 Composer 仓库&#xff0c;需要经过一系列的准备和操作步骤&#xff0c;以下是详细说明&#xff1a; 准备工作 创建类库项目&#xff1a;确保你的 PHP 类库项目具有清晰的目录结构&#xff0c;遵循 PSR-4 等 PHP 编码规范。通常&#xff0c;类文件应…

频道web - 性能优化之往返缓存

性能优化之往返缓存 往返缓存简介:如何验证当前页面是否有往返缓存?有哪些开发场景可以用bfcache提升性能?哪些无需关注?阻止页面进行往返缓存的行为都有哪些?1、缓存2、强制刷新3、浏览器设置4、JavaScript 代码5、网络问题6、 iframe 本身不符合 bfcache 的条件为什么会…

当前热门 DApp 模式解析:六大方向的趋势与创新

去中心化应用&#xff08;DApp&#xff09;随着区块链技术的不断发展&#xff0c;已经成为 Web3 领域的核心创新之一。与传统应用不同&#xff0c;DApp 通过智能合约运行在区块链上&#xff0c;具有去中心化、透明、安全等特点。近年来&#xff0c;随着用户需求的变化和技术的发…

Windows中将springboot项目运行到docker的容器中

0&#xff0c;先打包好项目&#xff0c;再启动docker 1&#xff0c;在Java项目根目录下创建一个名为Dockerfile的文件&#xff08;没有扩展名&#xff09;&#xff0c;并添加以下内容。 # 使用OpenJDK的基础镜像 FROM openjdk:8-jdk-alpine# 设置工作目录 WORKDIR /app# 将项…

使用html 和javascript 实现微信界面功能1

1.功能说明&#xff1a; 搜索模块: 提供一个搜索框&#xff0c;但目前没有实现具体的搜索功能。 好友模块: 在左侧的“好友”部分有一个“查看好友”按钮。点击左侧的“查看好友”按钮时&#xff0c;会在右侧显示所有好友的列表。列表中每个好友可以点击查看详情&#xff0c;包…

uniapp——H5中使用富文本编辑器,如何使用。

一、插件市场 去插件市场找到这个插件https://ext.dcloud.net.cn/plugin?id14726 二、引入 找到自己项目引入 项目里面多了很多文件 三、使用 找到A页面&#xff0c;在里面引入组件 <view class"editBox"><sp-editor exportHtml"handleExpor…

前端视角下的Go语法学习:创建 Go 项目

今日话题 使用 GoLand 创建 Go 项目 作者&#xff1a; 时间&#xff1a;2024年6月20日 17时16分14秒 主线任务 一、GoLand 创建项目 1、点击 “new Project” 按钮 2、已经有下载过两个 Golang SDK 版本&#xff0c;选择版本创建即可~ 3、如果没有下载过Golang SDK&#…

使用pyinstaller打包pyqt的程序,运行后提示ModuleNotFoundError: No module named ‘Ui_main‘

环境&#xff1a;windowpython3.9pyqt6 使用pyqt UI编辑器生成了main.ui &#xff0c;main.ui编译成了Ui_main.py main.py 使用当前目录下的Ui_main.py。 打包过程没报错&#xff0c;运行报错。 错误如下: 解决方法&#xff1a;pyinstaller -Fw main.py --paths. 使…