JSON 数据格式

发布时间:2026/9/25 18:31:19

JSON 数据格式
JSON 数据格式从入门到实战JSONJavaScript Object Notation是一种轻量级的数据交换格式易于人类阅读和编写也易于机器解析和生成。它基于 JavaScript 的子集但因其语言无关性被广泛应用于前端与后端、不同系统间的数据通信。本文将从实战角度出发通过大量代码示例带你全面掌握 JSON 的核心概念、操作技巧和常见应用场景。## 为什么选择 JSON在 Web 开发中数据交换格式如 XML、YAML 和 JSON 并存但 JSON 凭借简洁的语法和高效的解析速度成为事实标准。例如一个简单的用户数据在 JSON 中表示为json{ name: Alice, age: 30, isActive: true, hobbies: [reading, coding]}相比之下XML 需要更多标签而 JSON 的键值对结构更直观。此外JavaScript 原生支持 JSON无需额外库即可解析这使得它在前端开发中如鱼得水。## JSON 语法基础JSON 的语法规则简单明了- 数据由键值对组成键必须用双引号括起来。- 值可以是字符串、数字、布尔值、数组、对象或null。- 对象用花括号{}包裹数组用方括号[]包裹。- 键值对之间用逗号分隔末尾不能有逗号。### 常见错误示例json// 错误键未使用双引号{name: Bob}// 错误字符串使用单引号{city: New York}// 正确格式{name: Bob, city: New York}## 实战演示Python 操作 JSONPython 提供了内置的json模块用于处理 JSON 数据。下面是一个完整的示例从解析到生成 JSON并处理常见的数据类型。### 代码示例 1解析和生成 JSONpythonimport json# 原始 JSON 字符串从 API 或文件获取json_str { users: [ {id: 1, name: Alice, email: aliceexample.com, score: 85.5}, {id: 2, name: Bob, email: bobexample.com, score: 92.0} ], total: 2, status: success}# 1. 解析 JSON 字符串为 Python 字典data json.loads(json_str)print(解析后的数据类型:, type(data)) # class dictprint(第二个用户的名字:, data[users][1][name]) # 输出: Bob# 2. 修改数据添加一个新用户new_user {id: 3, name: Charlie, email: charlieexample.com, score: 78.0}data[users].append(new_user)data[total] 3# 3. 将 Python 字典转换回 JSON 字符串带缩进格式化updated_json json.dumps(data, indent2, ensure_asciiFalse)print(更新后的 JSON:\n, updated_json)# 4. 写入到文件with open(users.json, w, encodingutf-8) as f: json.dump(data, f, indent2, ensure_asciiFalse)print(数据已写入 users.json 文件)运行结果控制台会显示更新后的 JSON 结构并生成一个名为users.json的文件。注意ensure_asciiFalse确保中文或其他非 ASCII 字符正常显示。## 实战演示前端 JavaScript 处理 JSON前端开发中JSON 常用于 API 数据交互。以下示例演示如何从服务器获取 JSON 并渲染到网页上。### 代码示例 2使用 JavaScript 加载和渲染 JSONhtml!DOCTYPE htmlhtmlhead titleJSON 数据展示/title/headbody h2用户列表/h2 div iduser-list/div script // 模拟从服务器获取的 JSON 数据 const jsonData { users: [ { id: 1, name: Alice, age: 25, skills: [JavaScript, Python] }, { id: 2, name: Bob, age: 30, skills: [Java, SQL] }, { id: 3, name: Charlie, age: 28, skills: [C, Go] } ] }; // 1. 解析 JSON 字符串为 JavaScript 对象 const data JSON.parse(jsonData); console.log(解析后的对象:, data); // 2. 动态生成 HTML 内容 const container document.getElementById(user-list); let html ul; data.users.forEach(user { html li strong${user.name}/strong (年龄: ${user.age})br 技能: ${user.skills.join(, )} /li; }); html /ul; container.innerHTML html; // 3. 将 JavaScript 对象转换为 JSON 字符串并显示 const jsonString JSON.stringify(data, null, 2); console.log(转换回 JSON 字符串:\n, jsonString); document.body.innerHTML pre${jsonString}/pre; /script/body/html运行效果打开页面后会显示一个用户列表每个用户包含姓名、年龄和技能信息。页面底部还会打印出格式化后的 JSON 字符串。这个例子展示了 JSON 在前后端数据传递中的核心作用。## 高级应用JSON Schema 验证当 JSON 数据来自不可信源时验证其结构至关重要。JSON Schema 是一种描述 JSON 数据结构的规范类似于 XML Schema。以下是一个简单的 Python 验证示例pythonimport jsonfrom jsonschema import validate, ValidationError# 定义 JSON Schemaschema { type: object, properties: { name: {type: string, minLength: 1}, age: {type: integer, minimum: 0, maximum: 150}, email: {type: string, format: email}, hobbies: {type: array, items: {type: string}} }, required: [name, age]}# 待验证的数据valid_data {name: Alice, age: 30, email: aliceexample.com, hobbies: [reading]}invalid_data {name: , age: 200, hobbies: [123]} # 错误name 空age 超范围hobbies 元素类型错误try: validate(instancevalid_data, schemaschema) print(valid_data 验证通过)except ValidationError as e: print(valid_data 验证失败:, e.message)try: validate(instanceinvalid_data, schemaschema) print(invalid_data 验证通过)except ValidationError as e: print(invalid_data 验证失败:, e.message)输出invalid_data会触发ValidationError提示age超出最大值或name长度不足。这在构建 API 接口时非常有用可以提前拦截格式错误的数据。## 总结JSON 凭借其简洁性、跨语言支持和原生 JavaScript 集成成为现代 Web 开发中不可或缺的数据交换格式。通过本文的实战示例你学会了- JSON 的基本语法和常见陷阱。- 使用 Python 解析、修改和生成 JSON 数据并写入文件。- 在前端用 JavaScript 处理 JSON动态渲染页面内容。- 利用 JSON Schema 进行数据验证保证数据可靠性。在实际项目中建议始终使用json.dumps()的indent参数格式化输出并开启ensure_asciiFalse以支持国际化字符。对于复杂系统结合 JSON Schema 能显著降低数据错误带来的风险。掌握 JSON就是掌握数据流通的“通用语言”。

相关新闻

解锁Chrome内置AI:本地运行Gemini Nano,零延迟隐私保护

解锁Chrome内置AI:本地运行Gemini Nano,零延迟隐私保护

2026/8/24 22:37:38

你是否遇到过这样的场景:在浏览器里打开十几个标签页,每个页面都想用 AI 总结一下,或者快速翻译一段外文,结果要么得手动复制粘贴到某个 AI 工具,要么就得忍受网络延迟和隐私担忧?又或者,你开发的 Web 应用想集成 AI 功能,却苦于服务器成本、网络延迟和用户隐私的平衡难…

【信息科学与工程学】【通信工程】第七十三篇 分组网络中服务质量保障的算法 21

【信息科学与工程学】【通信工程】第七十三篇 分组网络中服务质量保障的算法 21

2026/8/24 22:37:38

射频计算算法建模:逐步推理的数学方程式,融合几何、拓扑、空间几何、矢量分析、代数、数论、离散数学、信息论、运筹学、计算机图形图像等方法。 计算机体系架构中的数据结构与算法:如队列、堆、图、树、哈希表、排序、搜索、动态规划、贪心、分治、回溯等,并说明其在系统…

大模型评估实战:小白程序员必备的收藏级教程!掌握核心指标与优化策略

大模型评估实战:小白程序员必备的收藏级教程!掌握核心指标与优化策略

2026/9/9 20:41:17

本文从检索质量、生成质量和端到端效果三个层面,详细解析了大模型的评估方法与指标体系。文章介绍了RAGAS、LLM-as-Judge等多种评估手段,并提供了构建评测集、自动化评估框架对比等实用指南。此外,还分享了检索与生成优化的决策树和速查表&am…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/25 10:06:33

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/25 9:40:47

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/25 10:06:21

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/25 9:53:52

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/25 8:58:17

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/25 10:00:17

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/24 16:02:49

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/25 9:41:47

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/25 4:22:14

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…