为了账号安全,请及时绑定邮箱和手机立即绑定

如何将json文件转换为列表

如何将json文件转换为列表

叮当猫咪 2022-01-11 17:59:17
我的 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 文件包含在列表中。有没有办法做到这一点?提前致谢!!
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

您将无法使用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'}]


查看完整回答
反对 回复 2022-01-11
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您可以阅读每一行,附加到一个列表,以后可以使用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))


查看完整回答
反对 回复 2022-01-11
  • 2 回答
  • 0 关注
  • 408 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信