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写xml文件的操作实例
Oct 05 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
Python实现选择排序
Jun 04 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
python批量爬取下载抖音视频
Jun 17 Python
在django中,关于session的通用设置方法
Aug 06 Python
如何在Django配置文件里配置session链接
Aug 06 Python
Python 获取项目根路径的代码
Sep 27 Python
Python求正态分布曲线下面积实例
Nov 20 Python
python圣诞树编写实例详解
Feb 13 Python
Python Merge函数原理及用法解析
Sep 16 Python
python selenium 获取接口数据的实现
Dec 07 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
php+ajax实现无刷新分页
2015/11/18 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
canvas实现钟表效果
2017/02/13 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
webpack v4 从dev到prd的方法
2018/04/02 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
Python实现的异步代理爬虫及代理池
2017/03/17 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
大学生护理专业自荐信
2013/10/03 职场文书
老公给老婆的道歉信
2014/01/10 职场文书
小学生演讲稿
2014/01/12 职场文书
环保倡议书400字
2014/05/15 职场文书
体育教师求职信
2014/06/30 职场文书
装修施工安全责任书
2014/07/24 职场文书
债务授权委托书范本
2014/10/17 职场文书
中国世界遗产导游词
2015/02/13 职场文书
调解协议书范本
2016/03/21 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript