python Yaml、Json、Dict之间的转化
JsonToDict
importjson
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}
{'a':1,'b':2,'c':3,'d':4,'e':5}
DictToJson
importjson
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}
{"a":1,"b":2,"c":3,"d":4,"e":5}
DictToYaml
importyaml
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
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
JsonToYaml
Json->Dict->Yaml
importjson,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}}
{'listDict':{'a':1,'b':2,'c':3,'d':4,'e':5}}
listDict:
a:1
b:2
c:3
d:4
e:5
Yaml->Dict
importyaml 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{'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'}]}
关于yaml->dict需要注意
yaml5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载器(FullLoader)禁止执行任意函数
importyaml 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/Users/yyj/Desktop/Project/HelloBike/TimeCalc/pydict2json/dict2json.py:88:YAMLLoadWarning:callingyaml.load()withoutLoader=...isdeprecated,asthedefaultLoaderisunsafe.Pleasereadhttps://msg.pyyaml.org/loadforfulldetails. 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'}]}
1、警告提示
YAMLLoadWarning:callingyaml.load()withoutLoader=...isdeprecated,asthedefault
Loaderisunsafe.Pleasereadhttps://msg.pyyaml.org/loadforfulldetails.
2.主要原因
yaml5.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语言。避免任意代码执行。这是当前(PyYAML5.1)默认加载器调用yaml.load(input)(发出警告后)。
- UnsafeLoader--(也称为Loader向后兼容性)原始的Loader代码,可以通过不受信任的数据输入轻松利用。
至此,Yaml、Json、Dict之间的转化介绍完了
以上就是pythonYaml、Json、Dict之间的转化的详细内容,更多关于pythonYaml、Json、Dict的资料请关注毛票票其它相关文章!