Содержимое моего файла 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 был включен в список. Есть какой-либо способ сделать это?

Заранее спасибо!!

1
Christina 16 Апр 2019 в 15:08

2 ответа

Лучший ответ

Вы можете прочитать каждую строку, добавить в список, которым позже можно будет управлять, используя ast:

CommitJson.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))
0
chepner 16 Апр 2019 в 17:24

Вы не сможете загрузить этот файл из коробки с 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'}]
1
displayname 16 Апр 2019 в 12:15