Python 如何在一个文件中保存多个JSON字符串?
我在一个文件中有以下多个JSON字符串:Python 如何在一个文件中保存多个JSON字符串?,python,json,python-3.x,Python,Json,Python 3.x,我在一个文件中有以下多个JSON字符串: { "col1": "e1", "col2": "e5" } { "col1": "a1", "col2": "a4", "col3": "e8" } 以下是我读取此文件的方式: import json data = [] for line in open('test.json', 'r', encoding='cp850'): data.append(json.loads(line)) 是否可以用以下格式表示此文件,即所有
{
"col1": "e1",
"col2": "e5"
}
{
"col1": "a1",
"col2": "a4",
"col3": "e8"
}
以下是我读取此文件的方式:
import json
data = []
for line in open('test.json', 'r', encoding='cp850'):
data.append(json.loads(line))
是否可以用以下格式表示此文件,即所有JSON字符串将被包装在[…]中,并且应该用逗号分隔它们:
[
{
"col1": "e1",
"col2": "e5"
},
{
"col1": "a1",
"col2": "a4",
"col3": "e8"
}
]
对于那些需要一些例子作为证据的人,我尝试了以下方法:
with open('output.json', 'w') as f:
json.dump(data, f)
它不会将数据内容写入JSON文件
还有一个肮脏的解决方案,两者都不起作用:
data = ""
with open('test.json', 'r', encoding='cp850') as myfile:
data = str(json.loads(line)) + "," + data
data = data[:len(data)-1] + "]" + data[len(data):]
data = "[" + data
with open('output.json', 'w') as outfile:
json.dump(data, outfile)
试试这个:
data = \
"""{
"col1": "e1",
"col2": "e5"
}
{
"col1": "a1",
"col2": "a4",
"col3": "e8"
}
"""
new_json = []
bracket_lvl = 0
curr_json = ''
for c in data:
curr_json += c
if c in (' ', '\t', '\n'):
continue
if c == '{':
bracket_lvl += 1
if c == '}':
bracket_lvl -= 1
if bracket_lvl == 0:
new_json.append(curr_json)
curr_json = ''
output = "[\n" + ','.join(new_json) + "\n]"
print(output)
输出:
[
{
"col1": "e1",
"col2": "e5"
},
{
"col1": "a1",
"col2": "a4",
"col3": "e8"
}
]
编辑:
请注意,这仅在json字符串被大括号包围时有效-如果您需要处理方括号的代码,我需要稍微编辑一下
编辑2:
如果要将其保存到文件中,请在程序底部使用以下命令:
with open('output.json', 'w') as f:
f.write(output)
在没有某种分隔符的情况下,每个文件有多个JSON不是一个好主意 我建议使用换行符分隔的意思是,每个JSON对象在文件中仅限于一行:
{"name": "json1"}
{"name": "json2"}
{"name": "json3"}
然后,您可以简单地迭代文件并执行如下操作:
objs = []
with open("jsons.txt") as f:
for line in f:
objs.append(json.loads(line))
with open("jsons.json", "w") as f:
json.dump(obj, f);
您拥有全部数据,因此将其与json.dumpsdata一起使用并保存it@hek2mgl我错过了jsonline上的细节,认为它是一个简单的json文件。尽管如此,我还是觉得有人在尝试,只是不是最伟大的尝试。FWIW,我在这个问题上是中立的。因为不清楚您的原始文件的实际结构是什么,这里有一个非常贫民区的方法来做它,只是为了好玩:使用open'test.json','r',encoding='cp850'作为file:data=eval'[{d}]'。formatd=file.read.replace'}','}','。我想说清楚,我根本不建议这样做。