python Yaml、Json、Dict之间的转化


Posted in Python onOctober 19, 2020

Json To Dict

import json

jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
print(jsonData)
print(type(jsonData))
text = json.loads(jsonData)
print(text)
print(type(text))


#######################
{"a":1,"b":2,"c":3,"d":4,"e":5}
<class 'str'>
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
<class 'dict'>

Dict To Json

import json
textDict = {"a":1,"b":2,"c":3,"d":4,"e":5}
print(textDict)
print(type(textDict))
# 字典转化为json
textJson = json.dumps(textDict)
print(textJson)
print(type(textJson))

########################

{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
<class 'dict'>
{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}
<class 'str'>

Dict To Yaml

import yaml

dictText = {
 "apiVersion": "rbac.authorization.k8s.io/v1",
 "kind": "ClusterRoleBinding",
 "metadata": {
 "name": "admin-user"
 },
 "roleRef": {
 "apiGroup": "rbac.authorization.k8s.io",
 "kind": "ClusterRole",
 "name": "cluster-admin"
 },
 "subjects": [
 {
  "kind": "ServiceAccount",
  "name": "admin-user",
  "namespace": "kube-system"
 }
 ]
}

print(type(dictText))

yamlText = yaml.dump(dictText)
print(yamlText)
print(type(yamlText))


#############################3

<class 'dict'>
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: admin-user
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin
subjects:
- kind: ServiceAccount
 name: admin-user
 namespace: kube-system

<class 'str'>

Json To Yaml

Json -> Dict -> Yaml

import json,yaml

jsonData = '{"listDict":{"a":1,"b":2,"c":3,"d":4,"e":5}}';
print(jsonData)
print(type(jsonData))
# Json -> Dict
text = json.loads(jsonData)
print(text)
print(type(text))
# Dict -> Yaml
textYaml = yaml.dump(text)
print(textYaml)
print(type(textYaml))

#############################

{"listDict":{"a":1,"b":2,"c":3,"d":4,"e":5}}
<class 'str'>
{'listDict': {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}}
<class 'dict'>
listDict:
 a: 1
 b: 2
 c: 3
 d: 4
 e: 5

<class 'str'>

Yaml -> Dict

import yaml

yamlText ='''
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: admin-user
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin
subjects:
- kind: ServiceAccount
 name: admin-user
 namespace: kube-system'''


print(yamlText)
print(type(yamlText))
# Yaml -> Dict
dictText = yaml.load(yamlText,Loader=yaml.FullLoader)
print(dictText)
print(type(dictText))


#############################


apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: admin-user
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin
subjects:
- kind: ServiceAccount
 name: admin-user
 namespace: kube-system
<class 'str'>
{'apiVersion': 'rbac.authorization.k8s.io/v1', 'kind': 'ClusterRoleBinding', 'metadata': {'name': 'admin-user'}, 'roleRef': {'apiGroup': 'rbac.authorization.k8s.io', 'kind': 'ClusterRole', 'name': 'cluster-admin'}, 'subjects': [{'kind': 'ServiceAccount', 'name': 'admin-user', 'namespace': 'kube-system'}]}
<class 'dict'>

关于 yaml -> dict 需要注意

yaml 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载​​器(FullLoader)禁止执行任意函数

import yaml

yamlText ='''
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: admin-user
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin
subjects:
- kind: ServiceAccount
 name: admin-user
 namespace: kube-system'''


print(yamlText)
print(type(yamlText))
# yaml -> dict 没有设置 ,Loader=yaml.FullLoader 执行后如下含有警告
dictText = yaml.load(yamlText)
print(dictText)
print(type(dictText))

#########################

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: admin-user
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin
subjects:
- kind: ServiceAccount
 name: admin-user
 namespace: kube-system
<class 'str'>
/Users/yyj/Desktop/Project/HelloBike/TimeCalc/pydict2json/dict2json.py:88: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
 dictText = yaml.load(yamlText)
{'apiVersion': 'rbac.authorization.k8s.io/v1', 'kind': 'ClusterRoleBinding', 'metadata': {'name': 'admin-user'}, 'roleRef': {'apiGroup': 'rbac.authorization.k8s.io', 'kind': 'ClusterRole', 'name': 'cluster-admin'}, 'subjects': [{'kind': 'ServiceAccount', 'name': 'admin-user', 'namespace': 'kube-system'}]}
<class 'dict'>

1、警告提示

YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default
Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.

2.主要原因

yaml 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载​​器(FullLoader)禁止执行任意函数

3.解决方法

1.yaml.load(f, Loader=yaml.FullLoader)

2.yaml.warnings({'YAMLLoadWarning': False}) # 全局设置警告,不推荐

Loader的几种加载方式

  • BaseLoader--仅加载最基本的YAML
  • SafeLoader--安全地加载YAML语言的子集。建议用于加载不受信任的输入。
  • FullLoader--加载完整的YAML语言。避免任意代码执行。这是当前(PyYAML 5.1)默认加载器调用yaml.load(input)(发出警告后)。
  • UnsafeLoader--(也称为Loader向后兼容性)原始的Loader代码,可以通过不受信任的数据输入轻松利用。

至此,Yaml 、Json 、Dict 之间的转化 介绍完了

以上就是python Yaml 、Json 、Dict 之间的转化的详细内容,更多关于python Yaml 、Json 、Dict的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
Pandas中Series和DataFrame的索引实现
Jun 27 Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 Python
Python3 使用pillow库生成随机验证码
Aug 26 Python
在vscode中配置python环境过程解析
Sep 28 Python
在pycharm中实现删除bookmark
Feb 14 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 Python
Python MNIST手写体识别详解与试练
Nov 07 Python
python高温预警数据获取实例
Jul 23 Python
Python pip 常用命令汇总
Oct 19 #Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 #Python
python Tornado框架的使用示例
Oct 19 #Python
python mock测试的示例
Oct 19 #Python
python 提高开发效率的5个小技巧
Oct 19 #Python
python 利用toapi库自动生成api
Oct 19 #Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 #Python
You might like
JAVA/JSP学习系列之四
2006/10/09 PHP
用ODBC的分页显示
2006/10/09 PHP
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
canvas的神奇用法
2017/02/03 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
centos系统升级python 2.7.3
2014/07/03 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
旅游管理专业学生求职信
2013/09/28 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
比较node.js和Deno
2021/04/27 Javascript