• Yaml 、Json 、Dict 之间的转化


    Yaml 、Json 、Dict 之间的转化

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

  • 相关阅读:
    ASP.NET Core中的Action的返回值类型
    ASP.NET Core中的Controller
    ASP.NET Core Authentication and Authorization
    ASP.NET Core
    ASP.NET Core ActionFilter引发的一个EF异常
    使用Github Packages功能上传nuget包到Github
    「每日五分钟,玩转JVM」:线程共享区
    JVM(二):画骨
    Spring Boot 2.x (十八):邮件服务一文打尽
    一道面试题
  • 原文地址:https://www.cnblogs.com/BlueSkyyj/p/13214254.html
Copyright © 2020-2023  润新知