你有没有过这样的经历?打开开发工具,看到一串用大括号、中括号包裹的字符,明明每个字都认识,连起来却一脸懵;调用接口时,只因少写一个逗号、用了单引号,就报错半天找不到问题;想存一组数据,又怕格式混乱,后续无法解析。其实,这串常见的字符,就是编程、接口开发、数据存储中最常用的JSON格式——它并非高深技术,而是一种通用、轻量简洁的数据交换格式,如同所有编程语言都能识别的数据记事本,贯穿前端、后端、爬虫、APP开发等几乎所有场景。JSON:JavaScript Object Notation,但千万别被名字误导,它虽然源于JavaScript,却和具体的编程语言无关,Python、Java、Go、PHP等所有主流语言都能轻松解析和生成它。比如你刷公众号时,文章的标题、作者、发布时间、内容,本质上就是后端用JSON格式打包好,传递给前端展示的;你用爬虫爬取数据时,网站返回的多半也是JSON格式;甚至手机APP里的用户信息、商品列表,软件的配置参数,很多都是用JSON存储的。它的优势特别明显:体积小、读写快、结构清晰,既方便人阅读,也方便计算机解析,这也是它能取代繁琐的XML,成为现在数据交换首选格式的原因。举个直观示例,一段描述用户信息的JSON如下,其结构清晰易懂:{ "name": "张三", "age": 25, "isStudent": false, "email": null, "hobbies": ["读书", "编程", "旅行"], "address": { "city": "北京", "zipCode": "100000" }}
JSON的语法非常简单,但也极其严格——多一个逗号、错一个引号,都会导致解析失败。多数格式报错,都源于违反了相关规则,需重点牢记。JSON只有两种基础结构,所有复杂的JSON数据,均由这两种结构嵌套组合而成:- 对象(Object):用 {} 包裹,里面是一组键值对(key: value),键和值之间用冒号: 分隔,多个键值对之间用逗号 , 分隔。比如上面例子中,整个用户信息就是一个对象,address也是一个嵌套的对象。
- 数组(Array):用 [] 包裹,里面是一组有序的值,值之间用逗号 , 分隔。值可以是字符串、数字、对象,甚至是另一个数组,比如上面的hobbies就是一个数组,里面存了3个字符串值。
JSON支持6种数据类型,没有多余的复杂类型,干净又简洁,对应到常见编程语言也很好理解:- 字符串(String):必须用 双引号 包裹(单引号不合法),可以包含中文、特殊符号,支持转义字符(比如 \n 表示换行、\" 表示双引号)。示例:"name": "张三"、"message": "Hello\nWorld"。
- 数字(Number):直接写,不用加引号,支持整数、浮点数和科学计数法,不能有前导零(除了0本身)。示例:"age": 25、"price": 99.9、"count": 1.23e4。
- 布尔值(Boolean):只有两个值,true(真)和 false(假),必须小写,不能加引号。示例:"isStudent": false。
- 空值(Null):表示没有值,用 null 表示,必须小写,不能加引号(注意和Python的None、JavaScript的undefined区分开)。示例:"email": null。
- 对象(Object):嵌套结构,用 {} 包裹,比如上面的address对象。
- 数组(Array):有序列表,用 [] 包裹,比如上面的hobbies数组。
- 键(key)必须是字符串,必须用双引号包裹,不能用单引号、也不能不加引号。错误:{name: "张三"}、{'name': "张三"};正确:{"name": "张三"}。
- 字符串必须用双引号,单引号不合法。错误:{"name": '张三'};正确:{"name": "张三"}。
- 键值对之间、数组元素之间,用逗号分隔,但最后一个元素后面不能加逗号(高频报错点)。错误:{"name": "张三", "age": 25,};正确:{"name": "张三", "age": 25}。
- JSON不支持任何注释(// 或 /* */ 都不行),加了注释会直接报错。如果需要备注,建议单独写文档,或使用支持注释的JSONC格式(仅用于配置文件)。
- 不能使用undefined、函数、日期对象等类型,这些是编程语言特有的,JSON不支持。比如{"date": new Date()} 是错误的,可改为 {"date": "2026-04-18"}(用字符串表示日期)。
JSON作为通用的数据交换格式,不同编程语言均提供了对应的解析与生成方法,以下针对三种主流编程语言,结合实际开发场景提供完整案例,便于直接复制应用。JavaScript内置JSON对象,无需导入额外模块,可直接实现JSON字符串与JavaScript对象的相互转换,用法简洁高效,以下是完整可运行案例。const jsonStr = '{"name": "张三","age": 25,"isStudent": false,"email": null,"hobbies": ["读书", "编程", "旅行"],"address": {"city": "北京","zipCode": "100000"}}';const userObj = JSON.parse(jsonStr);console.log(userObj.name); console.log(userObj.age); console.log(userObj.address.city); const productObj = { productId: 1001, productName: "笔记本电脑", price: 5999.99, inStock: true, tags: ["轻薄", "高性能", "商务"]};const productJson = JSON.stringify(productObj);console.log(productJson);}
Python通过内置的json模块,实现JSON数据的解析与生成,需先导入模块,支持多种参数配置,以下案例涵盖基础用法与常用场景。import jsonjson_str = '{"name": "张三","age": 25,"isStudent": false,"email": null,"hobbies": ["读书", "编程", "旅行"],"address": {"city": "北京","zipCode": "100000"}}'user_dict = json.loads(json_str)print(user_dict["name"]) print(user_dict["hobbies"][0]) print(user_dict["address"]["zipCode"]) book_dict = { "bookId": 2001, "bookName": "Python编程入门", "author": "小琳", "price": 59.9, "publishDate": "2026-01-01", "chapters": ["基础语法", "数据类型", "JSON解析"]}book_json = json.dumps(book_dict, indent=2, ensure_ascii=False)print(book_json)}
阅读原文:原文链接
该文章在 2026/4/23 16:22:13 编辑过