我的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文件包含在列表中。有什么办法吗?
提前谢谢!
答案 0 :(得分:1)
您将无法使用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 :(得分:0)
您可以阅读每一行,并追加到列表中,以后可以使用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))