JSON 格式详解

news2024/9/25 11:19:34

JSON 格式详解

随着互联网的发展和各种 Web 应用程序的普及,数据交换已经成为了我们日常开发中的重要环节。而在各种数据交换格式中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易于阅读和解析的特性,得到了广泛应用。本文将对 JSON 格式进行详细介绍,帮助大家更好地理解和使用它。

一、什么是 JSON?

JSON 是一种基于文本的数据交换格式,源于 JavaScript 语言,但其设计目的是独立于语言的。目前,几乎所有主流编程语言都支持 JSON,常用于数据存储和网络传输。

以下是B站尚硅谷javaweb课程老师的图解:
在这里插入图片描述
(原课程视频链接:尚硅谷Javaweb教程)

JSON 的结构由两种基本数据结构组成:对象(object)和数组(array)。对象是键值对的集合,而数组是有序的值集合。

二、JSON 的基本语法
1. 对象(Object)

对象表示为花括号 {} 包围的内容,内部是多个键值对的集合。键(key)是字符串,值(value)可以是任意合法的 JSON 数据类型。键值对之间使用逗号 , 分隔,键和值之间使用冒号 : 分隔。

{
  "name": "Alice",
  "age": 25,
  "isStudent": false
}
2. 数组(Array)

数组表示为方括号 [] 包围的内容,内部是按顺序排列的多个值。数组中的值可以是任意合法的 JSON 数据类型,不需要相同类型。

[
  "Apple",
  "Banana",
  "Cherry"
]
3. 键值对(Key-Value Pair)

键值对由键和值组成,键必须是字符串,值可以是任意类型。注意键要用双引号括起来。

{
  "key": "value"
}
4. 数据类型

JSON 支持以下几种数据类型:

  • 字符串(String):由双引号括起来的字符序列,如 "Hello World"
  • 数字(Number):包括整数和浮点数,如 423.14
  • 布尔值(Boolean):即 truefalse
  • 数组(Array):值的有序集合,如 [1, 2, 3]
  • 对象(Object):键值对的无序集合,如 {"key": "value"}
  • 空值(null):表示空数据,即 null
三、JSON 的优点
  1. 轻量级:相比 XML 等格式,JSON 更加简洁,减少了数据传输量。
  2. 易于阅读和书写:其结构简单,符合大多数开发者的习惯,便于阅读和手动书写。
  3. 解析效率高:JSON 的解析速度非常快,特别适合在浏览器和服务器之间进行数据交互。
  4. 良好的语言支持:几乎所有的编程语言都提供了对 JSON 的良好支持,方便开发者在不同的技术栈中使用。
四、JSON 的常见应用场景
  1. Web API 数据传输:JSON 常用于 RESTful API 的请求和响应格式,用于前后端之间的数据传输。
  2. 配置文件:JSON 格式常用作配置文件,简单明了,易于修改和解析。
  3. 数据存储:一些 NoSQL 数据库(如 MongoDB)使用 JSON 或类似 JSON 的格式来存储数据。
  4. 跨平台数据交换:JSON 可以用于不同平台、不同编程语言之间的数据交换,确保数据的一致性和兼容性。
五、如何解析 JSON?

由于 JSON 格式广泛支持,几乎所有主流编程语言都内置了 JSON 的解析库。以 JavaScript 和 Python 为例,简单介绍如何解析 JSON 数据。

1. JavaScript

在 JavaScript 中,可以使用 JSON.parse() 方法将 JSON 字符串解析为 JavaScript 对象,使用 JSON.stringify() 方法将 JavaScript 对象转换为 JSON 字符串。

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

let jsonStr = JSON.stringify(obj);
console.log(jsonStr);  // 输出: {"name":"Alice","age":25}
2. Python

在 Python 中,可以使用 json 模块中的 loads() 方法将 JSON 字符串解析为 Python 字典,使用 dumps() 方法将 Python 字典转换为 JSON 字符串。

import json

json_string = '{"name": "Alice", "age": 25}'
obj = json.loads(json_string)
print(obj['name'])  # 输出: Alice

json_str = json.dumps(obj)
print(json_str)  # 输出: {"name": "Alice", "age": 25}
六、JSON 与 XML 的对比

虽然 JSON 与 XML 都是常见的数据交换格式,但它们各有优劣。

  • 简洁性:JSON 更加简洁,数据结构的表示直观且紧凑,而 XML 则需要冗长的标签。
  • 可读性:JSON 更易于阅读,尤其是对于熟悉 JavaScript 语法的开发者。XML 标签则可能显得过于复杂。
  • 解析效率:JSON 的解析通常比 XML 更快,特别是在 Web 环境中。

不过,XML 也有其独特的优势,例如更好的描述性和更丰富的数据验证机制(如 DTD、XSD)。因此,选择哪种格式取决于具体应用场景。

七、注意事项
  1. 避免循环引用:JSON 不支持对象的循环引用,在转换带有循环引用的对象时会抛出错误。
  2. 大小写敏感:JSON 的键名是大小写敏感的,在使用时要特别注意。
  3. 安全性问题:在解析外部提供的 JSON 数据时,必须小心避免潜在的安全问题,防止恶意数据导致代码执行错误或安全漏洞。
八、总结

JSON 作为一种轻量级的数据交换格式,凭借其简洁、易于解析等特点,已经成为了 Web 开发中的事实标准。无论是数据传输、配置文件还是跨平台数据交换,JSON 都有着广泛的应用场景。掌握 JSON 的使用,能够大大提高我们的开发效率,提升应用的灵活性与兼容性。

希望本文能帮助大家更好地理解 JSON 格式,在实际开发中灵活运用这一强大的工具。如果你有任何问题或建议,欢迎在评论区留言讨论!


谢谢观看!如果觉得文章对你有所帮助的话,可以点点赞,加个关注哦~

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

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

相关文章

2024.9.4(k8s)

一、前期准备 1、配置主机映射 [rootk8s-master ~]# vim /etc/hosts 192.168.8.168 k8s-master 192.168.8.176 k8s-node1 192.168.8.177 k8s-node2[rootk8s-master ~]# ping k8s-master 2、配置yum源 [rootk8s-master yum.repos.d]# vim kubernetes.repo [kubernetes] n…

智能医学(二)——MDPI特刊推荐

特刊征稿 01 特刊名称: eHealth and mHealth: Challenges and Prospects, 2nd Volume 参与期刊: 截止时间: 摘要提交截止日期 关闭(2024年6月30日) 投稿截止日期 2024年9月30日 目标及范围: 关键字 l 人工智能 l 计算机…

模拟实现string类及体验传统深拷贝

目录 strcpy 构造函数 优化 拷贝构造/深拷贝 operator size/operator[] operator<< c_str() 模拟string::iterator 插入 push_back() append() operator reserve npos strcpy strcpy是将/0拷贝完成后才会停止。 构造函数 string():_str(nullptr) {} st…

vite 打包 学习

plugins.jsimport vue from "vitejs/plugin-vue"; // 自动引入插件 import autoImport from "unplugin-auto-import/vite"; import setupExtend from "unplugin-vue-setup-extend-plus/vite"; import { ElementPlusResolver } from unplugin-vue…

国内Etsy开店注册账号需要什么?

Etsy作为海外知名二手电商平台&#xff0c;对于原创手工产品的商家来说具有巨大的市场流量与商机&#xff0c;但注册Etsy账号对于国内跨境电商用户来说确实存在一定的难度&#xff0c;作为Etsy也是小有名气的小商家&#xff0c;今天也分享一下开店的经验帮助大家出海。 一、Ets…

终端安全一体化解决方案有哪些?值得收藏的五款终端安全系统

随着信息技术的迅猛发展&#xff0c;企业和个人面临着越来越多的安全威胁。终端作为连接互联网和用户的第一线&#xff0c;其安全性直接影响到整个网络乃至组织的安全态势。为了应对日益复杂的网络环境&#xff0c;许多企业开始采用终端安全一体化解决方案&#xff0c;以期达到…

EVPN学习

三、VXLAN BGP EVPN基本原理_vxlan的type2,type3区别-CSDN博客 华为数通笔记VXLAN&BGP EVPN_vxlan为什么用bgp协议-CSDN博客

【MeterSphere】vnc连接不上selenium-chrome容器

目录 一、现象 二、查看配置文件 docker-compose-seleniarm.yml 三、处理 3.1 删除上图当中的三行 3.2 msctl reload 3.3 重新连接 前言:使用vnc连不上ms的selenium-chrome容器,看不到里面运行情况,以前其实可以,后来不行了,研究了一下 一、现象 输入IP:端口,连…

vmware 17.6 pro for personal USE初体验

新学期开学了&#xff0c;暑假期间把台式机放在办公室远程&#xff0c;无赖期间经常断电&#xff0c;把我的老台给烧坏了&#xff0c;检测了下固态硬盘和机械硬盘&#xff0c;好歹能用。但是win11的系统奔溃了。就花了半天时间重装。*v* 悲剧的是&#xff0c;一些软件环境必须…

怎么合并pdf文件?6个PDF文件合并成一个,只需要这5步!

在日常工作和学习中&#xff0c;我们经常需要处理多个PDF文件&#xff0c;有时为了方便查阅和管理&#xff0c;需要将它们合并成一个文件。以下是几种实用的方法来合并PDF文件&#xff0c;特别是如何将6个PDF文件合并成一个。 PDF合并工具推荐1. 金舟PDF编辑器 第一步、从金舟…

php民宿短租平台Java民宿预约系统python民宿预订住宿与可视化分析系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

【C++ 第十八章】C++11 新增语法(4)

前情回顾&#xff1a; 【C11 新增语法&#xff08;1&#xff09;&#xff1a;1~6 点】 C11出现与历史、花括号统一初始化、initializer_list初始化列表、 auto、decltype、nullptr、STL的一些新变化 【C11 新增语法&#xff08;2&#xff09;&#xff1a;7~8 点】 右值引用和…

爬虫练习(js逆向解密)

目标 网站地址交易列表 - 福建省公共资源交易电子公共服务平台 (fj.gov.cn) 抓取内容如下&#xff1a; 分析 查找js代码 点击下一页翻页的时候&#xff0c;查看请求返回的数据&#xff0c;发现data数据是经过加密后得到的 通过全局搜索data,发现有两千多个结果&#xff0c;一个…

Qt将数据库中的数据导出为html

一、源码分享 bool ReportFormUtils::exportReportHtml(QString &errString, const QString tableName, const QString savePathAndName, const QString tableTitle, const QString tableInfo) {Q_UNUSED(errString)Q_UNUSED(tableName)Q_UNUSED(savePathAndName)#define …

原子放大1亿倍能看到另一个宇宙?微观与宏观是一体的?

原子的行星模型 开始阐述前,先从物质 组成与体积 方面进行一些铺垫与解释:我们身处于物质的世界,大部分物质由分子构成,分子由原子构成,原子由电子、质子、中子构成,质子,中子又是由夸克构成。鉴于人类目前的科技,或许未来也可以知道电子的组成是否有更加微观的存在…

kubernetes中的资源管理

目录 1 资源管理介绍 2 资源管理的方式 2.1 kubectl命令介绍及格式 2.2 资源类型 2.3 kubectl 常见操作指令 2.3.1 CREATE 示例&#xff1a; 2.3.1.1 指定资源类型创建 2.3.1.2 查看创建的资源类型 2.3.1.3 查看pods是否正确被创建并且被调度 2.3.1.4 查看名为shuyan 的 Dep…

Flutter基本组件Text使用

Text是一个文本显示控件&#xff0c;用于在应用程序界面中显示单行或多行文本内容。 Text简单Demo import package:flutter/material.dart;class MyTextDemo extends StatelessWidget {const MyTextDemo({super.key});overrideWidget build(BuildContext context) {return Sca…

我写了个ffmpeg-spring-boot-starter 使得Java能剪辑视频!!

最近工作中在使用FFmpeg&#xff0c;加上之前写过较多的SpringBoot的Starter&#xff0c;所以干脆再写一个FFmpeg的Starter出来给大家使用。 首先我们来了解一下FFmpeg能干什么&#xff0c;FFmpeg 是一个强大的命令行工具和库集合&#xff0c;用于处理多媒体数据。它可以用来做…

【redis】redis编译和redis.conf配置

下载源码 reids 解压编译 # 解压 tar -zxvf redis-5.0.14.tar.gz cd redis-5.0.14/ make PREFIX/opt/redis install# requirepass root # 开启远程访问 bind 0.0.0.0 protected-mode no # 修改日志打印路径&#xff0c;修改redis.conf daemonize yes logfile /var/log/redis.…

[深度学习][LLM]:浮点数怎么表示,什么是混合精度训练?

混合精度训练 混合精度训练1. 浮点表示法&#xff1a;[IEEE](https://zh.wikipedia.org/wiki/电气电子工程师协会)二进制浮点数算术标准&#xff08;IEEE 754&#xff09;1.1 浮点数剖析1.2 举例说明例子 1:例子 2: 1.3 浮点数比较1.4 浮点数的舍入 2. 混合精度训练2.1 为什么需…