gpt4 book ai didi

Python将包含嵌套json的字符串转换为dict

转载 作者:行者123 更新时间:2023-12-03 08:10:16 26 4
gpt4 key购买 nike

我有以下列表(注意“keyE”有一个字典作为字符串):

[
{
"keyA": "Example",
"keyB": "{\"keyC\":2,\"keyD\":{\"keyE\":\"{\"name\":\"foo\"}\"},\"keyF\":0}"
},
{
"keyA": "Example2",
"keyB": "{\"keyC\":6,\"keyD\":{\"keyE\":\"{\"name\":\"bar\"}\"},\"keyF\":5}"
}
]

我想将其转换为这个(它可以有任意数量的嵌套字典和列表):

[
{
"keyA": "Example",
"keyB": {
"keyC": 2,
"keyD": {
"keyE": {
"name": "foo"
}
},
"keyF": 0
}
},
{
"keyA": "Example2",
"keyB": {
"keyC": 6,
"keyD": {
"keyE": {
"name": "bar"
}
},
"keyF": 5
}
}
]

到目前为止,我有以下内容,但我不知道在 json.loads 之后要做什么。我知道我必须递归调用该函数,但不知道如何调用。

import json

def convert(data_list: list) -> list:
for i in range(len(data_list)):
obj = data_list[i]

for key, value in obj.items():
if isinstance(value, str) and any(char in "{[]}" for char in value):
try:
data = json.loads(value)
# What do I do here?
except:
continue

最佳答案

不知道这是否适用于您更复杂的情况,但我能够使用 ast.literal_eval() 和一些非常糟糕的链接 str.replace 调用:

import ast


def replace(s):
return ast.literal_eval(s.replace(r'"{', "{").replace(r'}"', "}"))


x = [{"keyA": "Example",
"keyB": "{\"keyC\":2,\"keyD\":{\"keyE\":\"{\"name\":\"foo\"}\"},\"keyF\":0}"},
{"keyA": "Example2",
"keyB": "{\"keyC\":6,\"keyD\":{\"keyE\":\"{\"name\":\"bar\"}\"},\"keyF\":5}"}]


for d in x:
for key, value in d.items():
if "{" in value:
d[key] = replace(value)

输出:

In [4]: x
Out[4]:
[{'keyA': 'Example',
'keyB': {'keyC': 2, 'keyD': {'keyE': {'name': 'foo'}}, 'keyF': 0}},
{'keyA': 'Example2',
'keyB': {'keyC': 6, 'keyD': {'keyE': {'name': 'bar'}}, 'keyF': 5}}]

In [5]: x[0]["keyB"]["keyD"]["keyE"]["name"]
Out[5]: 'foo'

关于Python将包含嵌套json的字符串转换为dict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71059822/

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