如何将json文件转换成lis

2024-10-03 09:20:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我的json文件的内容是:

{'user': 'fgb59h', 'stars': 4.0, 'time': 1027296000}

{'user': 'bucho_ky', 'stars': 2.0, 'time': 1201305600}

{'user': 'redp944', 'stars': 4.0, 'time': 1118016000}

我想把它转换成这样:

[
{"user": "fgb59h", "stars": 4.0, "time": 1027296000}

{"user": "bucho_ky", "stars": 2.0, "time": 1201305600}

{"user": "redp944", "stars": 4.0, "time": 1118016000}
]

我将单引号转换为双引号,如下所示:

with open('ep.json', 'r') as myfile:
    data=myfile.read()
obj = json.dumps(data)
json_ep = obj.replace("'", "\"")

但是现在我需要将json文件包含在一个列表中。有什么办法吗?你知道吗

提前谢谢!!你知道吗


Tags: 文件jsonobj内容datatimemyfileep
2条回答

您将无法使用json从盒子中加载此文件。您必须先替换所有的单量子点,然后用json.loads加载数据。但是,您也可以使用ast来读取单引号的json,如下所示:

import ast
from io import StringIO

data = """
{'user': 'fgb59h', 'stars': 4.0, 'time': 1027296000}

{'user': 'bucho_ky', 'stars': 2.0, 'time': 1201305600}

{'user': 'redp944', 'stars': 4.0, 'time': 1118016000}
"""

records = list()
for line in StringIO(data).readlines():
    if not len(line.strip()): continue
    data_dict = ast.literal_eval(line)
    records.append(data_dict)

print(records)

输出:

[{'stars': 4.0, 'time': 1027296000, 'user': 'fgb59h'},
 {'stars': 2.0, 'time': 1201305600, 'user': 'bucho_ky'},
 {'stars': 4.0, 'time': 1118016000, 'user': 'redp944'}]

您可以读取每一行,附加到一个列表中,稍后可以使用ast进行操作:

你知道吗提交json.json地址:

{'user': 'fgb59h', 'stars': 4.0, 'time': 1027296000}
{'user': 'bucho_ky', 'stars': 2.0, 'time': 1201305600}
{'user': 'redp944', 'stars': 4.0, 'time': 1118016000}

因此:

import json
import ast
res = []
with open('commitJson.json', 'r') as fp:
    for line in fp:
        res.append(line.strip())

print(json.dumps([ast.literal_eval(i) for i in res], indent = 4))

输出

[
    {
        "user": "fgb59h",
        "stars": 4.0,
        "time": 1027296000
    },
    {
        "user": "bucho_ky",
        "stars": 2.0,
        "time": 1201305600
    },
    {
        "user": "redp944",
        "stars": 4.0,
        "time": 1118016000
    }
]

较短版本

with open('commitJson.json', 'r') as fp:
     print(json.dumps([ast.literal_eval(line.strip()) for line in fp], indent = 4))

相关问题 更多 >