JSON怎么使用实例:从基础到实践的全面指南
JSON怎么使用实例:从基础到实践的全面指南
JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,因其易读、易解析、跨语言兼容的特性,成为前后端数据交互、API接口响应、配置文件存储等场景的主流选择,本文将通过具体实例,从JSON的基础语法到实际应用场景,带你快速JSON的使用方法。
JSON是什么?核心特点解析
JSON本质上是一种文本格式,用于存储和传输结构化数据,它基于JavaScript的一个子集,但独立于语言,几乎所有编程语言都支持JSON的解析和生成,核心特点包括:
- 键值对结构:数据以
"key": value
的形式组织,key必须是字符串(用双引号包裹),value可以是多种类型。 - 数据类型支持:value可以是字符串、数字、布尔值、null、数组(有序列表)或对象(键值对集合)。
- 轻量级:相比XML,JSON更简洁,无冗余标签,数据量更小。
- 易解析:可直接被JavaScript的
JSON.parse()
和JSON.stringify()
方法处理,其他语言也有成熟的库支持。
JSON基础语法与实例
要正确使用JSON,需先其语法规则,以下通过实例逐一说明JSON中的常见数据类型。
对象(Object):键值对的集合
对象用包裹,多个键值对之间用逗号分隔,key必须是字符串(双引号),value可以是任意JSON支持的类型。
实例:用户信息对象
{ "userId": 1001, "username": "张三", "age": 25, "isStudent": false, "address": { "city": "北京", "district": "海淀区" }, "courses": ["数学", "英语", "编程"] }
- 解析:这是一个用户对象,包含
userId
(数字)、username
(字符串)、isStudent
(布尔值)、address
(嵌套对象)、courses
(数组)等字段。
数组(Array):有序列表
数组用[]
包裹,元素可以是任意JSON类型,多个元素用逗号分隔,数组支持嵌套(如数组中的元素是对象或另一个数组)。
实例:学生列表数组
[ { "name": "李四", "age": 20, "hobbies": ["篮球", "游戏"] }, { "name": "王五", "age": 22, "hobbies": ["阅读", "旅行"] } ]
- 解析:这是一个包含两个学生对象的数组,每个学生对象又有
hobbies
字段(嵌套数组)。
基本数据类型
- 字符串:必须用双引号()包裹,不能用单引号。
"gender": "女"
。 - 数字:整数或浮点数,无需引号。
"score": 95.5
。 - 布尔值:
true
或false
(全小写),无需引号。"isActive": true
。 - null:表示空值,小写
null
,无需引号。"phone": null
。
语法注意事项
- 键值对之间、数组元素之间必须用逗号分隔,但最后一个元素后不能有逗号(部分解析器可能容错,但不符合标准)。
- 所有字符串必须用双引号,单引号会导致解析错误。
- 不能使用JavaScript中的特殊值,如
undefined
、NaN
、Infinity
等。
JSON的实际使用场景与实例
JSON的核心价值在于“数据交换”,以下是几个典型应用场景及代码实例。
场景1:前后端数据交互(API响应)
前端从后端获取数据时,后端通常以JSON格式返回响应数据,一个用户登录接口的响应:
后端返回的JSON数据(示例)
{ "code": 200, "message": "登录成功", "data": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "userInfo": { "userId": 1001, "username": "张三", "loginTime": "2023-10-01 14:30:00" } } }
前端JavaScript解析JSON
// 模拟从后端获取的JSON字符串(实际开发中通过fetch/axios获取) const jsonResponse = '{"code": 200, "message": "登录成功", "data": {"token": "...", "userInfo": {"userId": 1001, "username": "张三", "loginTime": "2023-10-01 14:30:00"}}}'; // 1. 将JSON字符串解析为JavaScript对象 const responseObj = JSON.parse(jsonResponse); // 2. 访问解析后的数据 console.log(responseObj.message); // 输出: "登录成功" console.log(responseObj.data.userInfo.username); // 输出: "张三"
场景2:前端数据存储(LocalStorage)
LocalStorage只能存储字符串类型的数据,若需存储对象或数组,需先用JSON.stringify()
转换为JSON字符串,读取时再用JSON.parse()
还原。
实例:存储用户浏览历史
// 1. 准备要存储的数据(JavaScript对象) const browseHistory = [ { id: 1, title: "JSON入门教程", time: "2023-10-01 10:00" }, { id: 2, title: "JavaScript高级技巧", time: "2023-10-01 11:30" } ]; // 2. 转换为JSON字符串并存储 localStorage.setItem('browseHistory', JSON.stringify(browseHistory)); // 3. 从LocalStorage读取数据并解析 const storedHistory = JSON.parse(localStorage.getItem('browseHistory')); console.log(storedHistory); // 输出: 原始数组对象
场景3:配置文件存储
JSON常用于存储应用程序的配置信息,如数据库连接参数、功能开关等。
实例:数据库配置文件(config.json)
{ "database": { "host": "localhost", "port": 3306, "username": "root", "password": "123456", "databaseName": "my_app" }, "features": { "enableCache": true, "maxCacheSize": 1000, "logLevel": "info" } }
Node.js读取配置文件
// 1. 引入fs模块(文件系统模块) const fs = require('fs'); // 2. 读取配置文件(同步读取) const configData = fs.readFileSync('config.json', 'utf8'); // 3. 解析为JavaScript对象 const config = JSON.parse(configData); // 4. 使用配置数据 console.log(`数据库地址: ${config.database.host}`); console.log(`缓存开关: ${config.features.enableCache ? '开启' : '关闭'}`);
场景4:跨语言数据交换
JSON是跨语言的“通用语”,不同编程语言可通过JSON传递数据,Python生成JSON数据,JavaScript接收并解析。
Python生成JSON字符串
import json # 1. 准备Python字典 user_data = { "userId": 1002, "username": "Alice", "age": 28, "skills": ["Python", "数据分析", "机器学习"] } # 2. 转换为JSON字符串 json_str = json.dumps(user_data, ensure_ascii=False) # ensure_ascii=False支持中文 print(json_str)
输出结果:{"userId": 1002, "username": "Alice", "age": 28, "skills": ["Python", "数据分析", "机器学习"]}
JavaScript接收Python生成的JSON
// 假设这是从Python后端接收到的JSON字符串 const pythonJsonStr = '{"userId": 1002, "username": "Alice", "age": 28, "skills": ["Python", "数据分析", "机器学习"]}'; // 解析为JavaScript对象 const userObj = JSON.parse(pythonJsonStr); console.log(userObj.skills[1]); // 输出: "数据分析"
JSON的常见错误与避坑指南
在使用JSON时,以下错误需特别注意:
引号错误
- 错误示例:
{'name': '张三'}
(key使用单引号)。 - 正确写法:
{"name": "张三"}
(key必须用双引号)。
还没有评论,来说两句吧...