如何写JSON文件:从基础到实践的全面指南
JSON是什么?为什么需要写JSON文件?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,以易于人类阅读和编写的文本形式存储和传输数据,它基于JavaScript的一个子集,但已成为独立于语言的通用格式,广泛应用于API接口、配置文件、数据存储等场景。
相比XML等格式,JSON更简洁、解析效率更高,且直接支持JavaScript原生操作,无论是前端存储用户配置、后端返回API响应,还是程序间数据交换,JSON文件的编写都是必备技能。
JSON的基本语法规则:写对JSON的前提
在动手写JSON文件前,必须其核心语法规则,否则文件可能无法被正确解析:
数据类型
JSON支持6种基本数据类型:
- 字符串:用双引号包裹,如
"name"、"北京"(注意:单引号不符合JSON标准)。 - 数字:整数或浮点数,如
25、14,不支持科学计数法(如1e3)。 - 布尔值:
true或false(全小写,不可写作True或False)。 - null:表示空值,写作
null(不可写作NULL或None)。 - 数组:有序集合,用方括号
[]包裹,元素间用逗号分隔,如["apple", "banana", 123]。 - 对象:无序键值对集合,用花括号包裹,键值对用冒号分隔,多组键值对用逗号分隔,如
{"name": "张三", "age": 30}。
语法规范
- 键名必须是字符串(双引号包裹),值可以是上述任意数据类型。
- 数据项之间必须用逗号分隔,但最后一个数据项后不能有逗号(如
{"a": 1, "b": 2}正确,{"a": 1, "b": 2,}错误)。 - 整个JSON文件必须有且仅有一个根元素(可以是对象或数组)。
- 支持嵌套结构:对象内可嵌套对象或数组,数组内也可嵌套对象或数组,如
{"user": {"name": "李四", "hobbies": ["reading", "coding"]}}。
如何手动编写JSON文件?
手动编写JSON适用于简单场景,如配置文件、小型数据存储,以下是具体步骤:
确定数据结构
先明确要存储的数据内容,规划其结构,要存储一个“用户信息”,可能包含:姓名(字符串)、年龄(数字)、邮箱(字符串)、爱好(数组)。
按语法规则编写文本
根据数据结构,用JSON语法编写文本,以上述用户信息为例:
{
"name": "王五",
"age": 28,
"email": "wangwu@example.com",
"hobbies": ["篮球", "编程", "旅行"]
}
保存为.json文件
将编写好的文本保存为.json后缀的文件(如user.json),注意:
- 文件编码统一使用
UTF-8,避免中文或特殊字符乱码。 - 用纯文本编辑器保存(如VS Code、Sublime Text、记事本),避免Word等富文本编辑器。
验证JSON格式
手动编写容易出错(如逗号、引号缺失),需用工具验证:
- 在线验证工具:如JSONLint(https://jsonlint.com/),粘贴代码后点击“Validate”,若提示“Valid JSON”则格式正确。
- 编辑器插件:VS Code中安装“JSON”插件,保存时会自动提示语法错误。
如何通过代码生成JSON文件?
实际开发中,数据通常来自程序逻辑(如数据库查询、用户输入),需通过代码动态生成JSON文件,以下是不同语言的实现方法:
Python:使用json模块
Python内置json模块,可轻松将Python对象转换为JSON字符串,并写入文件。
示例:将字典写入JSON文件
import json
# 准备Python字典(JSON对象对应Python字典)
data = {
"name": "赵六",
"age": 25,
"is_student": True,
"courses": ["数学", "英语"],
"address": None
}
# 写入JSON文件(确保文件路径存在)
with open("student.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4) # ensure_ascii=False支持中文,indent=4格式化缩进
print("JSON文件生成成功!")
关键参数说明:
ensure_ascii=False:允许非ASCII字符(如中文)直接输出,避免转义为\u格式。indent=4:格式化输出,缩进4个空格,提升可读性(若省略,JSON会以单行存储)。
进阶:将列表写入JSON文件
若数据是列表(如多个用户信息),只需将Python列表传入json.dump:
users = [
{"name": "张三", "age": 30},
{"name": "李四", "age": 25}
]
with open("users.json", "w", encoding="utf-8") as f:
json.dump(users, f, ensure_ascii=False, indent=4)
JavaScript(Node.js):使用JSON对象
Node.js中可直接通过JSON对象的stringify()和writeFile()方法生成JSON文件。
示例:将对象写入JSON文件
const fs = require('fs'); // 引入文件系统模块
const data = {
name: "钱七",
age: 35,
skills: ["JavaScript", "Python", "SQL"]
};
// 将对象转换为JSON字符串(格式化)
const jsonString = JSON.stringify(data, null, 2); // null表示不替换任何值,2表示缩进2空格
// 写入文件
fs.writeFile('employee.json', jsonString, 'utf8', (err) => {
if (err) {
console.error("写入失败:", err);
return;
}
console.log("JSON文件生成成功!");
});
关键方法说明:
JSON.stringify(obj, replacer, space):将对象/数组转换为JSON字符串。replacer:可选参数,可过滤或转换数据(如指定只保留某些键)。space:格式化缩进(数字或字符串,如2或'\t')。
fs.writeFile():异步写入文件,也可用fs.writeFileSync()同步写入。
Java:使用Gson或Jackson库
Java没有内置JSON处理类,需借助第三方库(如Google Gson、Jackson),以Gson为例:
步骤1:添加Gson依赖(Maven)
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
步骤2:编写代码生成JSON文件
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class JsonWriter {
public static void main(String[] args) {
// 准备Java对象
Person person = new Person("孙八", 40, Arrays.asList("Java", "Spring"));
// 创建Gson实例(设置格式化)
Gson gson = new GsonBuilder().setPrettyPrinting().create();
// 转换为JSON字符串并写入文件
try (FileWriter writer = new FileWriter("person.json")) {
gson.toJson(person, writer);
System.out.println("JSON文件生成成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
// 定义Person类
static class Person {
private String name;
private int age;
private List<String> hobbies;
public Person(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
this.hobbies = hobbies;
}
// 需要提供getter方法(Gson通过反射访问字段)
public String getName() { return name; }
public int getAge() { return age; }
public List<String> getHobbies() { return hobbies; }
}
}
JSON文件编写常见错误及避坑指南
引号错误:用单引号包裹字符串
// 错误示例
{'name': '周九', 'age': 22}
// 正确示例
{"name": "周


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