内容简介:我们知道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协议的正确使用场合(谨慎使用)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JS 压缩/解压工具
在线压缩/解压 JS 代码
SHA 加密
SHA 加密工具