json基础教程:数据格式规则+常见错误解决,从入门到实战案例教学

admin 综合编程开发技术 4


刚接触 JSON 的新手是不是经常遇到这些麻烦?写的 JSON 文件一验证就报错,对着红色波浪线半天找不到问题;把 Python 字典存成 JSON,打开一看中文全变成了乱码;解析 API 返回的 JSON 数据时,总是提示 “键不存在”,明明看起来一模一样。别焦虑,兔子哥刚开始学 JSON 时,光是搞懂双引号和单引号的区别就卡了好久,写个简单的用户信息 JSON,因为多了个逗号愣是调试了 20 分钟。今天就从数据格式规则到常见错误解决,再到实战案例,带零基础的朋友一步步入门 JSON,让你少踩坑、快上手!

一、基础问题:JSON 到底是啥?为啥非要学它?


可能有朋友会问:“我平时用 Excel 存数据、用 Python 字典处理信息,为啥还要学 JSON?” 这你就不知道了,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,简单说就是 “不同程序之间传递数据的通用语言”。
你想想,Python 的字典只能在 Python 里用,JavaScript 的对象只能在前端用,但 JSON 不一样,不管是 Python、Java、PHP 还是前端 JavaScript,都能看懂它。比如你用 Python 爬取的数据,想传给前端页面展示,用 JSON 格式最方便;你写的程序需要保存配置信息,JSON 文件比 txt 文本结构更清晰,比 Excel 更轻量。
现在的 API 接口返回数据、手机 APP 的本地数据存储、小程序的配置文件,几乎都在用 JSON。学会 JSON,处理数据交换和存储的问题会轻松很多,这可是编程入门的必备技能。

二、数据格式规则:3 个核心要求,5 种数据类型,记牢就不报错


JSON 格式看着简单,但规则很严格,哪怕多一个逗号、用错一个引号都会报错,这几个核心规则必须记牢。
  1. 核心格式要求:这 3 点错了必报错

  • 键值对必须用"键": 值格式,键必须用双引号包裹,值根据类型决定是否用引号。比如"name": "张三"正确,'name': "张三"(单引号)、name: "张三"(没引号)都会报错。
  • 多个键值对之间用逗号分隔,但最后一个键值对后面不能加逗号。比如{"age": 18, "gender": "男"}正确,{"age": 18, "gender": "男",}(末尾多逗号)会报错,很多新手容易犯这个错。
  • 整体结构要么是对象(用{}包裹),要么是数组(用[]包裹),可以嵌套但不能乱套。比如{"user": {"name": "李四", "hobby": ["读书", "跑步"]}}是正确的嵌套对象和数组,{"user": "name": "李四"}(缺少括号)会报错。

  1. 5 种常用数据类型:JSON 里能存这些数据

  • 字符串:必须用双引号包裹,比如"city": "北京",支持中文和英文,但不能用单引号。
  • 数字:整数或小数,不用加引号,比如"score": 95 {"price": 39.9}
  • 布尔值:只有truefalse(全小写),比如"is_student": true,注意不能写成True(这是 Python 的写法)。
  • 数组:用[]包裹的有序列表,元素可以是任意数据类型,比如"scores": [85, 90, 95] {"tags": ["Python", "JSON"]}
  • 对象:用{}包裹的键值对集合,可以嵌套其他对象或数组,比如"teacher": {"name": "王老师", "course": "数学"}

兔子哥提醒:JSON 里没有 Python 的None,空值要用null(全小写);也没有日期类型,日期通常存成字符串,比如"birthday": "2000-01-01"
数据类型格式要求正确示例错误示例
字符串双引号包裹"name": "张三"'name': "张三"(单引号)
数字无引号"age": 20"age": "20"(加引号)
布尔值全小写"is_pass": true"is_pass": True(大写)
数组[] 包裹"hobby": ["篮球", "足球"]"hobby": "篮球", "足球"(缺 [])
对象{} 包裹"user": {"name": "李四"}"user": "name": "李四"(缺 {})



三、场景问题:JSON 实战案例,用 Python 处理最常见场景


学会格式规则后,咱们用 Python 的json模块实战两个常见场景,看看实际中怎么用。
  1. 场景 1:把 Python 数据存成 JSON 文件(配置文件为例)
    很多程序需要保存配置信息,比如用户设置、数据库连接参数,用 JSON 文件很合适。
    步骤:

python
import json# 定义Python字典(要保存的数据)config = {"app_name": "我的小工具","version": "1.0.0","settings": {"theme": "light","auto_save": True,"font_size": 14},"plugins": ["plugin1", "plugin2"]}# 写入JSON文件with open("config.json", "w", encoding="utf-8") as f:# ensure_ascii=False:中文正常显示;indent=2:格式化输出,方便阅读json.dump(config, f, ensure_ascii=False, indent=2)

运行后会生成config.json文件,打开能看到格式化的 JSON 内容,清晰又好读。
  1. 场景 2:解析 API 返回的 JSON 数据(模拟接口数据)
    调用 API 接口时,返回的数据通常是 JSON 格式,需要解析后才能用。
    步骤:

python
import json# 模拟API返回的JSON字符串api_response = '''{"code": 200,"message": "success","data": {"user_id": 1001,"username": "小明","orders": [{"id": 1, "product": "手机", "price": 3999},{"id": 2, "product": "耳机", "price": 799}]}}'''# 解析JSON字符串为Python字典data = json.loads(api_response)# 提取需要的信息if data["code"] == 200:username = data["data"]["username"]order_count = len(data["data"]["orders"])print(f"用户名:{username},订单数量:{order_count}")  # 输出:用户名:小明,订单数量:2else:print("接口调用失败")

这样就轻松从 JSON 数据中提取出了用户名和订单数量,是不是很简单?


四、解决方案:新手最常踩的 5 个坑,这样解决


  1. 坑 1:用单引号包裹键或字符串,JSON 解析失败
    错误示例:{'name': '张三'}
    原因:JSON 规定必须用双引号,单引号不被认可。
    解决方法:把所有单引号换成双引号,{"name": "张三"}。兔子哥第一次写 JSON 就犯了这个错,报错提示 “语法错误”,改完双引号立马好了。
  2. 坑 2:键值对末尾多了逗号,格式校验不通过
    错误示例:{"age": 18, "gender": "男",}
    原因:JSON 不允许最后一个键值对后面加逗号,很多新手习惯了 Python 的语法,顺手就加了。
    解决方法:删掉末尾的逗号,{"age": 18, "gender": "男"}
  3. 坑 3:中文显示成 Unicode 编码(如 \u5f20\u4e09)
    错误现象:存 JSON 文件后中文变成"\u5f20\u4e09",看不清内容。
    原因:json.dump()时没加ensure_ascii=False参数,默认用 ASCII 编码中文。
    解决方法:加参数json.dump(data, f, ensure_ascii=False, encoding="utf-8"),中文就能正常显示了。
  4. 坑 4:混淆 Python 和 JSON 的布尔值 / 空值
    错误示例:JSON 里写"is_active": True {"address": None}
    原因:JSON 的布尔值是true/false(小写),空值是null,和 Python 的True/False/None不一样。
    解决方法:在 JSON 中用true/false/null,Python 转 JSON 时会自动转换,但手动写 JSON 要注意。
  5. 坑 5:解析嵌套 JSON 时取错层级,提示 “键不存在”
    错误操作:JSON 数据是{"data": {"user": {"name": "李四"}}},直接用data["name"]提取。
    原因:nameuser对象里,user又在data对象里,层级没取对。
    解决方法:按层级逐步提取,data["data"]["user"]["name"]才能拿到正确值,提取前可以先打印数据结构看看层级。

结尾心得


JSON 入门不难,难在注意格式细节和多练实战。新手学习时,别光看教程,一定要动手写几个 JSON 文件,用 Python 的json模块试试读写和解析,写错了别怕,根据报错信息对照规则改,改几次就熟了。兔子哥的经验是,把常用的dump() load()方法记熟,遇到中文乱码就加ensure_ascii=False,遇到末尾逗号报错就检查最后一个键值对。记住,JSON 是数据交换的 “通用语言”,学会它,不管是做开发、爬数据还是写脚本,都能让数据处理更轻松!

标签: json

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~