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)) #############################3apiVersion: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的资料请关注毛票票其它相关文章!