JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。JSON是独立于语言的文本格式,但使用了源于C语言家族的习惯,包括C、C++、C#、Java、JavaScript、Perl、Python等。这些特性使JSON成为理想的数据交换语言。
JSON格式最初由Douglas Crockford在20世纪90年代末提出。它源于JavaScript中表示对象和数组的语法,但JSON是独立于JavaScript的。2001年,JSON开始用于一个名为State Software公司的项目,用于在服务器和Web应用程序之间传递数据。
2002年,JSON首次被公开描述。2005年,Yahoo!开始为某些Web服务提供JSON格式的数据。2006年,JSON在RFC 4627中被指定为一种MIME媒体类型application/json。从那时起,JSON迅速流行,成为Web服务中最常用的数据格式之一,在很多情况下取代了XML。随着JSON的广泛应用,像jsonify.cn这样的在线JSON工具也应运而生,为开发者提供了便捷的JSON格式化、验证和编辑服务,成为处理JSON数据的得力助手。
JSON主要有两种结构:
JSON的值可以是:
以下是一个JSON对象的例子,描述了一个人的基本信息:
{
"name": "张三",
"age": 30,
"city": "北京",
"isMarried": false,
"hobbies": ["读书", "旅游", "摄影"],
"education": {
"degree": "硕士",
"major": "计算机科学",
"university": "北京大学"
}
}
这个例子展示了JSON的各种数据类型和嵌套结构。
Python提供了内置的json模块,使得处理JSON数据变得非常简单。以下是一些常用的操作:
import json
data = {
"name": "张三",
"age": 30,
"city": "北京"
}
json_string = json.dumps(data, ensure_ascii=False)
print(json_string)
# 输出: {"name": "张三", "age": 30, "city": "北京"}
注意,我们使用了ensure_ascii=False参数来确保中文字符正确显示。
json_string = '{"name": "张三", "age": 30, "city": "北京"}'
data = json.loads(json_string)
print(data["name"]) # 输出: 张三
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
data = {"name": "张三", "age": 30}
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
这里我们使用了indent参数来美化输出的JSON格式。
JSON相比于其他数据交换格式(如XML)有以下优势:
JSON广泛应用于各种场景,包括但不限于:
尽管JSON非常流行,但它也有一些局限性:
JSON简洁、灵活、易于特性让这种格式在前后端数据交换中称为主流,尤其移动端开发中。