"YAML易于人类阅读,为什么数据交换的王座却属于JSON?"
"YAML强在哪里,JSON又为什么必胜?"
🔥 1. 数据格式战争的序幕
很久以前,程序员们需要一种存储和交换数据的方法。
在早期,XML占据了王座。
<person>
<name>Alice</name>
<age>25</age>
<skills>
<skill>Python</skill>
<skill>Django</skill>
</skills>
</person>
但是XML过于冗长且沉重,难以阅读。
因此出现了JSON和YAML。
🤖 2. JSON: 夺取数据交换的王座
2001年,道格拉斯·克罗克福德(Douglas Crockford)推出了基于JavaScript对象表示法的JSON。
"简单、轻量、机器易于理解的数据交换格式!"
JSON的目标很明确:
✅ 人类可以阅读,但计算机能更好地读取的结构
✅ 优化了浏览器和服务器之间的数据传输
✅ 与面向对象语言(JavaScript、Python等)自然衔接
JSON示例:
{
"name": "Alice",
"age": 25,
"skills": ["Python", "Django"]
}
{}
和[]
就能表达数据结构,- 因为网页中的JavaScript可以直接处理JSON,所以迅速普及。
- 特别是因为在REST API中成为数据格式的标准,JSON最终夺取了王座。
🧐 3. YAML: 易于人理解的数据格式
但是也有希望获得比JSON更易读的格式的人。
"在表达数据结构时,如果没有多余的大括号和引号,不会更好吗?"
因此在2001年,YAML(Ain’t Markup Language)出现了。
name: Alice
age: 25
skills:
- Python
- Django
YAML的特点:
✅ 易于人类阅读(没有大括号和引号,干净利落!)
✅ 支持注释(可以使用#
)
✅ 便于在配置文件中使用
因此,YAML已成为配置文件的强者。
在Kubernetes、Docker、Ansible、CI/CD和GitHub Actions等地方,默认使用YAML作为格式!
但在数据交换市场上,YAML不敌JSON。
为什么呢? 🤔
🤯 4. YAML为什么没能打败JSON?
如果YAML易于阅读,本可以更流行……
但现实并非如此。
✅ JSON获胜的原因:
1. 语法太自由了?
- JSON通过{}
和[]
结构明确,
- YAML使用缩进来表达结构,因此更容易出错。
- 只需一个空格错误就会出错!(尤其是YAML的Tab与空格
问题 🤯)
- 解析速度慢
- JSON可以快速解析,但是,
- 由于YAML语法灵活,需要解析的内容很多,所以速度慢。
-
处理大量数据时比JSON更低效。
-
YAML存在安全隐患
- YAML可以包含可执行代码(
!python/object
), - 存在安全风险(RCE,远程代码执行)。
-
JSON是纯数据,因此是安全的!
-
浏览器不支持
- JSON是JavaScript的基础对象结构,但,
- YAML需要使用额外的库。
因此,JSON被选择作为网络和数据交换的标准。
🚀 5. 但YAML夺得了配置文件的王座!
但YAML并没有消失。
虽然JSON成为数据交换的标准,但YAML已成为配置文件的标准。
🔥 YAML强大的原因:
- 支持注释 (#) → 写配置文件时方便
- 人类易于阅读和修改
- 在Kubernetes、Docker、Ansible等DevOps中作为核心格式使用
实际使用案例:
- docker-compose.yml
- kubernetes.yml
- github-actions.yml
- ansible-playbook.yml
但要将YAML用于数据交换,需注意许多事项。
特别是在Django Rest Framework(DRF)中,也可以将序列化方式设置为YAMLRenderer,
但默认值仍然是JSONRenderer。
from rest_framework.renderers import JSONRenderer, YAMLRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
class ExampleView(APIView):
renderer_classes = [JSONRenderer, YAMLRenderer]
def get(self, request):
data = {"message": "Hello, YAML!"}
return Response(data)
但大多数API的默认格式是JSON!
这是因为YAML由于解析速度和安全问题而不被广泛使用。
🎯 6. 结论:JSON vs YAML,谁更优秀?
✅ 选择JSON的时机:
- 网络API,数据交换(速度和稳定性重要!)
- NoSQL数据存储
- 在浏览器中直接使用时
✅ 选择YAML的时机:
- 配置文件(Kubernetes、Docker、CI/CD)
- 易于人类阅读的文档编写
- 与DevOps相关的工作
一句话总结:
🚀 "JSON是数据交换的王,YAML是配置文件的王!"
댓글이 없습니다.