内容简介:我们知道YAML比JSON更适合于作为配置文件,因为YAML更适合人阅读与编辑,而JSON更适合程序处理。当我们希望在Web界面上编辑配置文件的时候,可以找到前端YAML编辑器插件来实现更好的编辑体验。在后端数据库中,我们应该将YAML转化成JSON在入库,因为JSON更适合后端数据操作。
我们知道YAML比JSON更适合于作为配置文件,因为YAML更适合人阅读与编辑,而JSON更适合程序处理。
当我们希望在Web界面上编辑配置文件的时候,可以找到前端YAML编辑器插件来实现更好的编辑体验。
在后端数据库中,我们应该将YAML转化成JSON在入库,因为JSON更适合后端数据操作。
我们可以为 python 安装PyYAML库,实现YAML的序列化/反序列化,并且实现和JSON之间的互相转换: https://pypi.org/project/PyYAML/ 。
反序列化YAML
假设YAML如下:
kind: Service apiVersion: v1 metadata: name: myservice spec: selector: app: myservice ports: - protocol: TCP port: 80 targetPort: 80
然后可以这样解析它:
import yaml input = """ kind: Service apiVersion: v1 metadata: name: myservice spec: selector: app: myservice ports: - protocol: TCP port: 80 targetPort: 80 """ a = yaml.safe_load(input) print(a)
YAML已被解析为python的字典:
{'kind': 'Service', 'apiVersion': 'v1', 'metadata': {'name': 'myservice'}, 'spec': {'selector': {'app': 'myservice'}, 'ports': [{'protocol': 'TCP', 'port': 80, 'targetPort': 80}]}}
序列化YAML
然后可以再把它变回YAML:
import yaml input = """ kind: Service apiVersion: v1 metadata: name: myservice spec: selector: app: myservice ports: - protocol: TCP port: 80 targetPort: 80 """ a = yaml.safe_load(input) b = yaml.safe_dump(a) print(b)
输出如下:
apiVersion: v1
kind: Service
metadata: {name: myservice}
spec:
ports:
- {port: 80, protocol: TCP, targetPort: 80}
selector: {app: myservice}
YAML转JSON
因为是python字典,也可以序列化为json:
import yaml import json input = """ kind: Service apiVersion: v1 metadata: name: myservice spec: selector: app: myservice ports: - protocol: TCP port: 80 targetPort: 80 """ a = yaml.safe_load(input) b = json.dumps(a) print(b)
输出如下:
{"kind": "Service", "apiVersion": "v1", "metadata": {"name": "myservice"}, "spec": {"selector": {"app": "myservice"}, "ports": [{"protocol": "TCP", "port": 80, "targetPort": 80}]}}
序列化/反序列化多个YAML
import yaml import json input = """ kind: Service apiVersion: v1 metadata: name: myservice spec: selector: app: myservice ports: - protocol: TCP port: 80 targetPort: 80 --- kind: Service apiVersion: v1 metadata: name: yourservice spec: selector: app: yourservice ports: - protocol: TCP port: 80 targetPort: 80 --- """ a = yaml.safe_load_all(input) a = list(a) b = yaml.safe_dump_all(a) print(b)
输出:
apiVersion: v1
kind: Service
metadata: {name: myservice}
spec:
ports:
- {port: 80, protocol: TCP, targetPort: 80}
selector: {app: myservice}
---
apiVersion: v1
kind: Service
metadata: {name: yourservice}
spec:
ports:
- {port: 80, protocol: TCP, targetPort: 80}
selector: {app: yourservice}
--- null
...
博主无私的分享着知识,你愿意送他一顿热腾腾的早餐吗?
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- RecyclerView使用指南(一)—— 基本使用
- 如何使用Meteorjs使用URL参数
- 使用 defer 还是不使用 defer?
- 使用 Typescript 加强 Vuex 使用体验
- [译] 何时使用 Rust?何时使用 Go?
- UDP协议的正确使用场合(谨慎使用)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Web Designer's Idea Book, Vol. 2
Patrick McNeil / How / 2010-9-19 / USD 30.00
Web Design Inspiration at a Glance Volume 2 of The Web Designer's Idea Book includes more than 650 new websites arranged thematically, so you can easily find inspiration for your work. Auth......一起来看看 《The Web Designer's Idea Book, Vol. 2》 这本书的介绍吧!