如何使用python将字符串转换为带分隔行的json

2024-06-02 08:35:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python,我有一个很大的“outputString”,它由几个输出组成,每个输出位于一个新行上,如下所示:

{size:1, title:"Hello", space:0}
{size:21, title:"World", space:10}
{size:3, title:"Goodbye", space:20}

但是,由于数据太多,我无法在终端中看到所有数据,因此我想编写自动写入json文件的代码。我很难让json保留分隔的行。现在,它只是json文件中的一个大行。我已经附加了一些我尝试过的代码。我还附上了用于将字符串转换为json的代码。非常感谢你

for value in outputList:
    newOutputString = json.dumps(value)
    outputString += (newOutputString + "\n")

with open('data.json', 'w') as outfile:
    for item in outputString.splitlines():
        json.dump(item, outfile)
        json.dump("\n",outfile)

Tags: 文件数据代码injsonforsizetitle
2条回答

您可以使用以下代码:

json_data = json.loads(outputString)
with open('data.json', 'w') as outfile:
    json.dump(json_data, outfile, indent= 5)

如果输入确实是一个字符串,那么您可能需要确保它的格式正确地设置为json:

outputString = '''{"size":1, "title":"Hello", "space":0}
{"size":21, "title":"World", "space":10}
{"size":3, "title":"Goodbye", "space":20}'''

然后,您可以使用pandas来操作您的数据(因此不再是屏幕大小的问题)

import pandas as pd
import json

pd.DataFrame([json.loads(line) for line in outputString.split('\n')])

其中:

   size    title  space
0     1    Hello      0
1    21    World     10
2     3  Goodbye     20

另一方面,据我所知outputString不是一个字符串,而是一个字典列表,因此您可以编写一个更简单的版本:

outputString = [{'size':1, 'title':"Hello", 'space':0},
{'size':21, 'title':"World", 'space':10},
{'size':3, 'title':"Goodbye", 'space':20}]

pd.DataFrame(outputString)

它给出了与前面相同的DataFrame。使用此数据框架将允许您查询数据,并且它将比JSON更加方便。比如说

>>> df = pd.DataFrame(outputString)
>>> df[df['size'] >= 3]
   size    title  space
1    21    World     10
2     3  Goodbye     20

你也可以尝试一下ipython(甚至jupyter/jupyterlab),因为这可能也会让你的生活更轻松

相关问题 更多 >