我有看起来像这样的yaml:

  SomeRecord:
    type: array
    items:
      type:
        - string
        - number
        - null


我尝试PyYAML和ruamel.yaml,它们都将'null'转换为None(类NoneType)。
有没有简单的方法来更改此行为?

最佳答案

您可以使用一个简单的递归函数来找到None值并将其转换为'None',如下所示:

码:

def convert_none_to_str(data):
    if isinstance(data, list):
        data[:] = [convert_none_to_str(i) for i in data]
    elif isinstance(data, dict):
        for k, v in data.items():
            data[k] = convert_none_to_str(v)
    return 'None' if data is None else data


测试代码:

yaml_data = """
  SomeRecord:
    type: array
    items:
      type:
        - string
        - number
        - null
"""

import yaml
data = yaml.safe_load(yaml_data)
print(data)
convert_none_to_str(data)
print(data)


结果:

{'SomeRecord': {'type': 'array', 'items': {'type': ['string', 'number', None]}}}
{'SomeRecord': {'type': 'array', 'items': {'type': ['string', 'number', 'None']}}}

07-24 09:52
查看更多