JSON 简述与应用

1. JSON 简述

        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于客户端与服务器之间的数据传递。它基于JavaScript对象表示法,但独立于语言,可以被多种编程语言解析和生成。

1.1 特点

        轻量级:相比于XML,JSON更简洁,数据体积更小。

        易读性:结构清晰,易于人类阅读和编写。

        易解析:解析和生成速度快,广泛支持于各种编程语言。

        可嵌套:JSON支持嵌套数据结构,可以表示复杂的数据模型。

2. XML 与 JSON 的区别

2.1 格式

        JSON 是基于键值对的简单格式。

        XML 是基于标签的复杂格式。

2.2 体积

        JSON 数据通常比 XML 更小,传输速度更快。

        XML 数据冗余信息较多,传输速度较慢。

2.3 可读性

        JSON 结构清晰,易读性强。

        XML 标签繁多,嵌套复杂,较难阅读。

2.4 解析

        JSON 解析速度快,容易解析。

        XML 解析需要解析器,速度较慢。

2.5 用途

        JSON 常用于客户端和服务器之间的数据传输。

        XML 常用于配置文件和文档格式的描述。

2.6 扩展性

        JSON 相对简单,不支持复杂的数据类型。

        XML 支持属性、命名空间等复杂数据表示。

3. JSON 语法格式

3.1 JSON 语法介绍

        JSON 使用键值对来表示数据,并且支持以下几种数据类型:

        数字(整数或浮点数)

        字符串(用双引号括起来)

        布尔值(true 或 false)

        数组(有序的值列表)

        对象(键值对的集合)

        null(空值)

3.2 JSON 语法规则

        对象:由花括号 `{}` 包围,包含零个或多个键值对。键和值之间用冒号 `:` 分隔,键值对之间用逗号 `,` 分隔。

        数组:由方括号 `[]` 包围,包含零个或多个值,值之间用逗号 `,` 分隔。

        字符串:使用双引号 `"` 括起来,支持转义字符(如 `\n`、`\t` 等)。

        数字:可以是整数或浮点数,不使用引号括起来。

        布尔值:true 或 false,不使用引号括起来。

        null:表示空值,不使用引号括起来。

3.3 JSON 语法示例

        一个典型的 JSON 对象如下所示:

{"name": "Alice","age": 30,"isStudent": false,"courses": ["Math", "Science", "Literature"],"address": {"street": "123 Main St","city": "Wonderland"},"phoneNumbers": [{"type": "home", "number": "123-456-7890"},{"type": "work", "number": "987-654-3210"}]}

        详细解释:

        `"name": "Alice"`:键 `name` 的值是字符串 `"Alice"`。

        `"age": 30`:键 `age` 的值是数字 `30`。

        `"isStudent": false`:键 `isStudent` 的值是布尔值 `false`。

        `"courses": ["Math", "Science", "Literature"]`:键 `courses` 的值是一个数组,包含三个字符串。

        `"address": { "street": "123 Main St", "city": "Wonderland" }`:键 `address` 的值是一个对象,包含两个键值对。

        "phoneNumbers": [ { "type": "home", "number": "123-456-7890" }, { "type": "work", "number": "987-654-3210" } ]`:键 `phoneNumbers` 的值是一个数组,数组中包含两个对象,每个对象表示一个电话号码。

3.4 JSON 数据传输

        在客户端和服务器之间传输 JSON 数据的流程如下:

3.4.1 浏览器向服务器发送请求

        浏览器通过HTTP请求将JSON数据发送到服务器。

const data = {"name": "Alice","age": 30};fetch('https://example.com/api', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify(data)}).then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error:', error));

3.4.2 服务器处理请求

        服务器解析收到的JSON数据,并进行相应处理。

        示例(Node.js + Express):

const express = require('express');const app = express();app.use(express.json());app.post('/api', (req, res) => {const receivedData = req.body;console.log(receivedData);res.json({ message: 'Data received', data: receivedData });});app.listen(3000, () => {console.log('Server is running on port 3000');});

3.4.3 服务器响应

        服务器处理完请求后,将结果以JSON格式返回给客户端。

3.4.4 浏览器处理响应

        浏览器解析服务器返回的JSON数据,并进行展示或进一步操作。

fetch('https://example.com/api').then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error:', error));

3.5 JSON 转换与解析

         将对象转换为 JSON 字符串

        使用 `JSON.stringify()` 方法。

const obj = {name: "Alice",age: 30};const jsonString = JSON.stringify(obj);console.log(jsonString); // 输出: {"name":"Alice","age":30}

        将 JSON 字符串解析为对象

        使用 `JSON.parse()` 方法。

const jsonString = '{"name": "Alice", "age": 30}';const obj = JSON.parse(jsonString);console.log(obj.name); // 输出: Aliceconsole.log(obj.age);  // 输出: 30

3.6 常见应用场景

        配置文件

        JSON 常用作应用程序的配置文件格式,例如:

{"appName": "MyApp","version": "1.0.0","settings": {"theme": "dark","notifications": true}}

        数据存储

        JSON 可以用于存储结构化数据,例如:

[{"id": 1,"name": "Alice","email": "alice@example.com"},{"id": 2,"name": "Bob","email": "bob@example.com"}]

        数据交换

        在 Web 应用中,JSON 常用于客户端与服务器之间的数据交换,例如 REST API 和 GraphQL。

3.7 JSON 与其他数据格式的比较

         JSON vs XML

        简洁性:JSON 更加简洁,减少了数据传输量。

        解析速度:JSON 解析速度更快,使用简单。

        易用性:JSON 更加直观,容易理解和使用。

        JSON vs CSV

        结构化数据:JSON 适合嵌套结构的数据,CSV 适合平面结构的数据。

        可读性:JSON 可读性强,CSV 更适合表格数据。

        灵活性:JSON 更灵活,支持复杂数据结构。

4. 总结

        JSON 是一种轻量级的数据交换格式,具有简洁、易读和易解析的特点,广泛应用于现代Web开发中。通过JSON,客户端和服务器之间可以高效地传输和处理数据,从而提升应用的性能和用户体验。

4.1 JSON 的优势

        简洁易用:相比XML,JSON更加简洁和直观。

        高效传输:较小的数据体积减少了传输时间。

        广泛支持:几乎所有的现代编程语言都支持JSON。

4.2 JSON 的局限性

        不支持注释:JSON 不支持在数据中添加注释,这在配置文件中可能是一个限制。

        数据类型限制:JSON 只支持基本数据类型,不支持日期、函数等复杂类型。

4.3 实际应用中的注意事项

        数据安全:在传输敏感数据时,需确保数据加密和传输安全。

        错误处理:在解析和生成JSON时,需做好错误处理,以避免数据格式错误导致的问题。

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

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

相关文章

JS对数据类型的检测方式

1. typeof()对于基本数据类型没问题,遇到引用数据类型就不管用 console.log( typeof 666 ); // number console.log( typeof [1,2,3] ); // object 2. instanceof()只能判断引用数据类型,不能判断基本数据类型 console.log( [] instanceof Array ) // tr…

Unity--协程--Coroutine

Unity–协程–Coroutine 1. 协程的基本概念 基本概念:不是线程,将代码按照划分的时间来执行,这个时间可以是具体的多少秒,也可以是物理帧的时间,也可以是一帧的绘制结束的时间。 协程的写法:通过返回IEnumerator的函数实现,使用yield return语句暂停执…

Golang | Leetcode Golang题解之第205题同构字符串

题目: 题解: func isIsomorphic(s, t string) bool {s2t : map[byte]byte{}t2s : map[byte]byte{}for i : range s {x, y : s[i], t[i]if s2t[x] > 0 && s2t[x] ! y || t2s[y] > 0 && t2s[y] ! x {return false}s2t[x] yt2s[y] …

python 查找轮廓

在Python中,查找图像的轮廓通常使用OpenCV库。以下是一个简单的示例代码,展示了如何使用OpenCV来查找并绘制图像的轮廓: pythonimport cv2 import numpy as np# 读取图像 image cv2.imread(your_image.jpg, 0) # 请将your_image.jpg替换为您…

设备树下的 platform 驱动编写

设备树下的 platform 驱动编写 设备树下的 platform 驱动简介 platform 驱动框架分为总线、设备和驱动,其中总线不需要我们这些驱动程序员去管理,这个是 Linux 内核提供的,我们在编写驱动的时候只要关注于设备和驱动的具体实现即可。在没有…

《昇思25天学习打卡营第6天 | 函数式自动微分》

《昇思25天学习打卡营第6天 | 函数式自动微分》 目录 《昇思25天学习打卡营第6天 | 函数式自动微分》函数式自动微分简单的单层线性变换模型函数与计算图微分函数与梯度计算Stop Gradient 函数式自动微分 神经网络的训练主要使用反向传播算法,模型预测值&#xff0…

建站小记:迁移域名DNS到CloudFlare

CloudFlare一直有赛博菩萨之称,据说用它做DNS解析服务又快又好又免费,还能防DDOS攻击,并且可以提供页面访问统计功能。 正好我博客网页打开略卡顿,所以决定将自己的DNS解析迁移到CloudFlare。 1.登录CF控制台,添加自己…

LeetCode-刷题记录-二分法合集(本篇blog会持续更新哦~)

一、二分查找概述 二分查找(Binary Search)是一种高效的查找算法,适用于有序数组或列表。(但其实只要满足二段性,就可以使用二分法,本篇博客后面博主会持续更新一些题,来破除一下人们对“只有有…

(已解决)Adobe Flash Player已不再受支持

文章目录 前言解决方案 前言 一般来说,很少遇到官方网站使用Adobe Flash Player来进行录用名单公示了。但是,今天就偏偏遇到一次, 用谷歌浏览器打不开, 点了没有反应,用其他的浏览器,例如windows自带的那…

Golang | Leetcode Golang题解之第207题课程表

题目: 题解: func canFinish(numCourses int, prerequisites [][]int) bool {var (edges make([][]int, numCourses)indeg make([]int, numCourses)result []int)for _, info : range prerequisites {edges[info[1]] append(edges[info[1]], info[0]…

数据结构:期末考 第六次测试(总复习)

一、 单选题 (共50题,100分) 1、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为( D ).(2.0) A、 &am…

在node环境使用MySQL

什么是Sequelize? Sequelize是一个基于Promise的NodeJS ORM模块 什么是ORM? ORM(Object-Relational-Mapping)是对象关系映射 对象关系映射可以把JS中的类和对象,和数据库中的表和数据进行关系映射。映射之后我们就可以直接通过类和对象来操作数据表和数据了, 就…

join()方法——连接字符串、元组、列表和字典

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 join()方法用于连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串&#…

喜报 | 极限科技获得北京市“创新型”中小企业资格认证

2024年6月20日,北京市经济和信息化局正式发布《关于对2024年度4月份北京市创新型中小企业名单进行公告的通知》,极限数据(北京)科技有限公司凭借其出色的创新能力和卓越的企业实力,成功获得“北京市创新型中小企业”的…

学会python——在excel中写入数据(python实例十三)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3 .想Excel中写入数据 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的…

数据结构算法之B树

一、绪论 1.1 数据结构的概念和作用 1.2 B树的起源和应用领域 二、B树的基本原理 2.1 B树的定义和特点 2.2 B树的结构和节点组成 2.3 B树的插入 2.4 B树的删除操作 三、B树的优势和应用 3.1 B树在数据库系统中的应用 3.2 B树在文件系统中的应用 3.3 B树在内存管理中…

HTML5的多线程技术:Shared Worker的使用示例

Shared Worker 与普通的 Web Worker 类似,但不同之处在于它可以被多个浏览器窗口、标签页或者iframe共享,使得这些上下文之间能够相互通信。下面是一个使用 Shared Worker 的完整示例。共享Worker脚本(sharedWorker.js) self.add…

isupper()方法——判断字符串是否全由大写字母组成

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isupper()方法用于判断字符串中所有的字母是否都是大写。isupper()方法的语法格式如下: str.isupper() 如果字符串中包含至少…

我是如何在bytemd中实现自定义目录的

介绍 接着上文说完,实现了在markdown编辑器中插入视频的能力,接下来还需要继续优化 markdown文档的阅读体验,比如 再加个目录 熟悉markdown语法的朋友可能会说,直接在编辑时添加 toc 标签,可以在文章顶部自动生成目录…

实验三 时序逻辑电路实验

仿真 链接:https://pan.baidu.com/s/1z9KFQANyNF5PvUPPYFQ9Ow 提取码:e3md 一、实验目的 1、通过实验,理解触发的概念,理解JK、D等常见触发器的功能; 2、通过实验,加深集成计数器功能的理解,掌…