JSON格式使用方法详解:从基础到实践
JSON格式使用方法详解:从基础到实践
在当今的软件开发中,JSON(JavaScript Object Notation)已成为数据交换的主流格式之一,它以轻量、易读、易解析的特性,广泛应用于前后端数据交互、API响应配置文件存储等场景,本文将从JSON的基础概念入手,逐步讲解其语法规则、使用方法及常见实践,帮助你快速JSON的使用技巧。
JSON是什么?
JSON是一种轻量级的数据交换格式,最初基于JavaScript的语法标准,但目前已独立于语言,被大多数编程语言(如Python、Java、C#、Go等)支持,它的设计目标是让数据在人类可读的同时,也能被机器轻松解析和生成,常用于替代XML等复杂格式。
JSON的基本语法规则
JSON的数据结构由两种核心类型组成:对象(Object)和数组(Array),所有数据都通过键值对(Key-Value Pair)的形式组织,以下是语法规则的详细说明:
对象(Object)
对象用花括号 表示,是“键值对”的无序集合,键(Key)必须是字符串,值(Value)可以是任意JSON支持的类型(字符串、数字、布尔值、数组、对象、null),键和值之间用冒号 分隔,多个键值对之间用逗号 分隔。
示例:
{
"name": "张三",
"age": 25,
"isStudent": false,
"address": {
"city": "北京",
"district": "海淀区"
}
}
数组(Array)
数组用方括号 [] 表示,是值的有序集合,值可以是任意JSON支持的类型(包括嵌套的对象或数组),多个值之间用逗号 分隔。
示例:
[
{ "id": 1, "product": "手机", "price": 3999 },
{ "id": 2, "product": "电脑", "price": 6999 },
{ "id": 3, "product": "平板", "price": 2999 }
]
值(Value)的合法类型
JSON中的值只能是以下6种类型:
- 字符串(String):必须用双引号 包围(单引号非法),如
"hello"。 - 数字(Number):整数或浮点数,无需引号,如
25、14。 - 布尔值(Boolean):只能是
true或false(全小写,首字母不大写)。 - null:表示空值,只能是
null(全小写)。 - 对象(Object):如上述 结构。
- 数组(Array):如上述
[]结构。
语法注意事项
- 键必须是字符串,且必须用双引号包围(不能使用单引号或无引号)。
- 值如果是字符串,必须用双引号包围;数字、布尔值、null无需引号。
- 逗号 不能在最后一个键值对或数组元素后出现(否则会报错)。
- JSON对大小写敏感,如
"Name"和"name"是不同的键。
JSON的使用方法
JSON的使用场景主要包括“数据生成”和“数据解析”,不同编程语言的操作方式略有差异,但核心逻辑一致,以下以Python和JavaScript为例,演示常见操作。
生成JSON(将对象/字典转为JSON字符串)
Python示例(使用json库):
import json
# 定义Python字典(类似JSON对象)
data = {
"name": "李四",
"age": 30,
"hobbies": ["阅读", "游泳"],
"contact": {
"email": "lisi@example.com",
"phone": "13800138000"
}
}
# 将字典转为JSON字符串(indent=4用于格式化,缩进4个空格)
json_str = json.dumps(data, indent=4, ensure_ascii=False)
print(json_str)
输出:
{
"name": "李四",
"age": 30,
"hobbies": [
"阅读",
"游泳"
],
"contact": {
"email": "lisi@example.com",
"phone": "13800138000"
}
}
说明:
dumps():将Python对象转为JSON字符串。indent:参数用于格式化输出,便于阅读;不传则输出为紧凑字符串(无换行和缩进)。ensure_ascii=False:确保非ASCII字符(如中文)原样输出,而非转为Unicode转义。
JavaScript示例(使用JSON.stringify):
// 定义JavaScript对象
const data = {
name: "王五",
age: 28,
hobbies: ["编程", "旅行"],
contact: {
email: "wangwu@example.com",
phone: "13900139000"
}
};
// 将对象转为JSON字符串(2为缩进空格数)
const jsonStr = JSON.stringify(data, null, 2);
console.log(jsonStr);
输出:与Python示例类似,格式化后的JSON字符串。
解析JSON(将JSON字符串转为对象/字典)
Python示例(使用json库):
import json
# 定义JSON字符串
json_str = '{"name": "赵六", "age": 35, "isEmployed": true}'
# 将JSON字符串转为Python字典
data = json.loads(json_str)
print(data["name"]) # 输出: 赵六
print(data["isEmployed"]) # 输出: True
说明:
loads():将JSON字符串转为Python对象(字典、列表等)。- 转换后,JSON的
object变为Python的dict,array变为list,string变为str,number变为int/float,true/false变为True/False,null变为None。
JavaScript示例(使用JSON.parse):
// 定义JSON字符串
const jsonStr = '{"name": "钱七", "age": 40, "isRetired": false}';
// 将JSON字符串转为JavaScript对象
const data = JSON.parse(jsonStr);
console.log(data.name); // 输出: 钱七
console.log(data.isRetired); // 输出: false
文件中的JSON操作
实际开发中,JSON常用于存储配置文件或数据文件,需通过文件读写操作处理。
Python示例(读写JSON文件):
import json
# 写入JSON文件
data = {"config": "timeout", "value": 30, "unit": "seconds"}
with open("config.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
# 读取JSON文件
with open("config.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
print(loaded_data) # 输出: {'config': 'timeout', 'value': 30, 'unit': 'seconds'}
说明:
json.dump():将Python对象写入文件(直接写入文件流)。json.load():从文件读取JSON字符串并转为Python对象。
JavaScript示例(Node.js环境读写JSON文件):
const fs = require('fs');
// 写入JSON文件
const data = { "logLevel": "info", "maxFiles": 5 };
fs.writeFileSync('config.json', JSON.stringify(data, null, 2));
// 读取JSON文件
const jsonStr = fs.readFileSync('config.json', 'utf-8');
const loadedData = JSON.parse(jsonStr);
console.log(loadedData); // 输出: { logLevel: 'info', maxFiles: 5 }
JSON的常见应用场景
-
前后端数据交互
现代Web开发中,后端API通常返回JSON格式的数据(如用户信息、商品列表),前端通过AJAX(如fetch、axios)请求并解析JSON,动态渲染页面。示例(前端请求API):
// 使用fetch获取JSON数据 fetch('https://api.example.com/users') .then(response => response.json()) // 解析JSON字符串 .then(data => console.log(data)) // 处理数据 .catch(error => console.error('



还没有评论,来说两句吧...