【发布时间】:2022-11-22 05:51:45
【问题描述】:
我需要保存 json 文件,而不分别以 [ 和 ] 开头和结尾。
样本数据:
import pandas as pd
import json
df = pd.DataFrame({'name' : ['abc', 'pqr', 'xzy'],
'score' : [85, 90, 80],
'address' : ['ab street', 'pq street', 'xy ave']})
df
name score address
0 abc 85 ab street
1 pqr 90 pq street
2 xzy 80 xy ave
然后我尝试使用以下方法保存上述数据框:
jl = json.loads(df.to_json(orient='records'))
f = open('expfile.json', 'w')
json.dump(jl, f, indent = 4)
f.close()
输出:
[
{
"name": "abc",
"score": 85,
"address": "ab street"
},
{
"name": "pqr",
"score": 90,
"address": "pq street"
},
{
"name": "xzy",
"score": 80,
"address": "xy ave"
}
]
这很好,但我需要没有开始和结束方括号的输出,如下所示:
{
"name": "abc",
"score": 85,
"address": "ab street"
},
{
"name": "pqr",
"score": 90,
"address": "pq street"
},
{
"name": "xzy",
"score": 80,
"address": "xy ave"
}
有人可以让我知道如何完成同样的事情。
PS 我的许多数据框中的列中都有复杂的嵌套字典/json 结构,我使用ast.literal_eval 解析了它们。
我尝试使用to_json(orient = 'records', lines = True),但我得到了这个错误JSONDecodeError: Extra data: line 2 column 1 (char 425)。
【问题讨论】:
-
那不再是 JSON 文件,因此 JSON 编写者不太可能直接生成它。您可以通过字符串操作(删除这些行,并“取消缩进”一层之间的所有其他内容)或通过自己遍历
jl并逐一对元素进行 JSON 处理来实现。