python Yaml、Json、Dict之间的转化

作者:Blue·Sky 时间:2022-05-15 02:26:17 

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 之间的转化 介绍完了

来源:https://www.cnblogs.com/BlueSkyyj/p/13214254.html

标签:python,Yaml,Json,Dict,转化
0
投稿

猜你喜欢

  • 站长如何活用"nofollow"标签

    2008-05-13 12:40:00
  • python3使用print打印带颜色的字符串代码实例

    2022-01-20 10:30:49
  • python调用c++ ctype list传数组或者返回数组的方法

    2021-09-28 01:24:04
  • 使用PHP实现生成HTML静态页面

    2023-11-14 11:14:41
  • python常见的格式化输出小结

    2022-12-29 20:23:31
  • ASP调试方法图文教程

    2008-01-26 19:32:00
  • Django web框架使用url path name详解

    2022-01-06 19:43:59
  • MySQL内建复制功能来优化可用性

    2010-10-25 20:20:00
  • asp用正则解析远程图片地址,用XMLHTTP将其保存

    2007-10-26 12:34:00
  • 配置SQL Server文件组对应不同的RAID系统

    2009-01-04 14:31:00
  • Python使用定时调度任务的方式

    2021-03-10 01:40:24
  • Python实现自动发消息自定义内容的操作代码

    2023-10-17 18:01:53
  • 微信小程序学习笔记之文件上传、下载操作图文详解

    2023-09-07 21:13:21
  • postman和python mock测试过程图解

    2022-02-19 00:59:57
  • 用asp给网站添加rss聚合功能

    2007-11-05 19:08:00
  • Servlet实现文件上传,可多文件上传示例

    2023-08-25 02:31:29
  • IE不支持overrideMimeType()方法,即使是IE7.

    2009-02-08 16:58:00
  • Pytorch:dtype不一致问题(expected dtype Double but got dtype Float)

    2023-07-05 21:57:33
  • python中numpy.zeros(np.zeros)的使用方法

    2023-10-08 17:40:07
  • Python 实现集合Set的示例

    2021-10-04 06:27:19
  • asp之家 网络编程 m.aspxhome.com