gpt4 book ai didi

python - 在 python 中从 JSON 创建可逆的 YAML

转载 作者:行者123 更新时间:2023-12-01 07:48:57 24 4
gpt4 key购买 nike

在尝试从 python 中的 JSON 创建 YAML 时,使用 PyYAML 库,我能够将 JSON 转换为 YAML。然而,在我收到的 YAML 结果中,JSON 的所有括号都展开了,而我想保留从 JSON 到转换后的 YAML 的一些方括号(列表)。我如何请求此库调用不将列表从 JSON 展开为 YAML,而是将其保留为列表?

我的问题的快照如下:

import yaml
import json

original_json = {'a': {'next': ['b'], 'prev': []},
'b': {'next': ['c'], 'prev': ['a']},
'c': {'next': ['d', 'e'], 'prev': ['b']},
'd': {'next': [], 'prev': ['c']},
'e': {'next': ['f'], 'prev': ['c']},
'f': {'next': [], 'prev': ['e']}}

obtained_yaml = yaml.dump(yaml.load(json.dumps(original_json)), default_flow_style=False)

# obtained_yaml looks like
#
# a:
# next:
# - b
# prev: []
# b:
# next:
# - c
# prev:
# - a
# c:
# next:
# - d
# - e
# prev:
# - b
# d:
# next: []
# prev:
# - c
# e:
# next:
# - f
# prev:
# - c
# f:
# next: []
# prev:
# - e

# expected yaml should look like
#
# a:
# next:
# - ["b"]
# prev: []
# b:
# next:
# - ["c"]
# prev:
# - ["a"]
# c:
# next:
# - ["d"]
# - ["e"]
# prev:
# - ["b"]
# d:
# next: []
# prev:
# - ["c"]
# e:
# next:
# - ["f"]
# prev:
# - ["c"]
# f:
# next: []
# prev:
# - ["e"]

我尝试了几种方法来解决这个问题,但所有这些都没有按照预期的 json 应该出现的方式工作。需要有关如何完成它的建议。

最佳答案

Yaml 语法定义了不同的列表结构,其中列表成员是以 -(破折号和空格)开头的相同缩进级别开始的行。如果您想保留括号,则需要将列表转换为 str - 但随后您将无法将 YAML 反转为 JSON。

这是一个示例,您可以看到,即使您可以将 ["a"] 转换为 [["a"]] - YAML 也会将其转换为 double缩进列表:

In [4]: import yaml
...: import json
...: import collections
...: original_json = {'a': {'next': ['b'], 'prev': []},
...: 'b': {'next': ['c'], 'prev': ['a']},
...: 'c': {'next': ['d', 'e'], 'prev': ['b']},
...: 'd': {'next': [], 'prev': ['c']},
...: 'e': {'next': ['f'], 'prev': ['c']},
...: 'f': {'next': [], 'prev': ['e']}}
...:
...: mod_json = collections.defaultdict(dict)
...: for k, v in original_json.items():
...: mod_json[k]["next"] = [v["next"]]
...: mod_json[k]["prev"] = [v["prev"]]
...: obtained_yaml = yaml.dump(yaml.load(json.dumps(mod_json)), default_flow_style=False)
...:
...:

In [5]: obtained_yaml
Out[5]: 'a:\n next:\n - - b\n prev:\n - []\nb:\n next:\n - - c\n prev:\n - - a\nc:\n next:\n - - d\n - e\n prev:\n - - b\nd:\n next:\n - []\n prev:\n - - c\ne:\n next:\n - - f\n prev:\n - - c\nf:\n next:\n - []\n prev:\n - - e\n'

关于python - 在 python 中从 JSON 创建可逆的 YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56322984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com