Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在一个文件中保存多个JSON字符串?_Python_Json_Python 3.x - Fatal编程技术网

Python 如何在一个文件中保存多个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)) 是否可以用以下格式表示此文件,即所有

我在一个文件中有以下多个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))
是否可以用以下格式表示此文件,即所有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'}','}','。我想说清楚,我根本不建议这样做。