当前位置: 首页 > 知识库问答 >
问题:

从一个文件中读取多个JSON[重复]

蓬琦
2023-03-14

我正在使用python,我有一个文件(data.json),其中包含多个json,但整个json都不是json。

所以文件看起来像这样:

{ "_id" : 01, ..., "path" : "2017-12-12" }
{ "_id" : 02, ..., "path" : "2017-1-12" }
{ "_id" : 03, ..., "path" : "2017-5-12" }

在<代码>处 大约还有30多个键,其中一些键有嵌套的json(所以我的观点是上面的每个json都很长)。

因此,上面这个单个文件中的每个块都是json,但整个文件不是json,因为它们没有用逗号等分隔。

如何使用pandas或simple python分别阅读这些JSON?

我试过这个:

import pandas as pd
df = pd.read_json('~/Desktop/data.json', lines=True)

它实际上创建了一个数据帧,其中每一行大约是一个json,但它也为json的每个(第一级)键创建了一列,这使得事情变得有点混乱,而不是将整个json直接放在一个单元格中。

更清楚地说,我希望我的输出在“熊猫”数据框架(或另一种合理的数据结构)中是这样的:

    jsons
0   { "_id" : 01, ..., "path" : "2017-12-12" }
1   { "_id" : 02, ..., "path" : "2017-1-12" }
2   { "_id" : 03, ..., "path" : "2017-5-12" }

共有2个答案

蔺昊穹
2023-03-14

由于文件本身不是json,所以我将逐行读取它,因为该行是字符串格式,所以我将使用yaml将其转换为dict类型,然后最后我将在数据框中追加它

import yaml
import pandas as pd
f = open('data.json')
line = f.readline()
df = pd.DataFrame()

while line:

    #string line to dict
    d = yaml.load(line)

    #temp dataframe
    df1=pd.DataFrame(d,index=[0])

    #append in every iteration
    df=df.append(df1, ignore_index=True)
    line = f.readline()

f.close()
print(df)
#output
  _id        path
0  01  2017-12-12
1  02   2017-1-12
2  03   2017-5-12
益和雅
2023-03-14

想法是使用数据中不存在分隔符的读取csv,然后将列的每个值转换为字典:

import pandas as pd
import ast, json
from io import StringIO

temp=u"""{ "_id" : 1,  "path" : "2017-12-12" }
{ "_id" : 2,  "path" : "2017-1-12" }
{ "_id" : 3,  "path" : "2017-5-12" }"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep="|", names=['data'])

print (df)

#jsons
df['data'] = df['data'].apply(json.loads)
#dictionaries
#df['data'] = df['data'].apply(ast.literal_eval)

print (df)
                               data
0  {'_id': 1, 'path': '2017-12-12'}
1   {'_id': 2, 'path': '2017-1-12'}
2   {'_id': 3, 'path': '2017-5-12'}
 类似资料:
  • 问题内容: 我想知道如何从单个文件夹中读取多个文件(无需指定文件名,只是它们是json文件)。 另外,有可能将它们转换为DataFrame吗? 能给我一个基本的例子吗? 问题答案: 一种选择是使用os.listdir列出目录中的所有文件,然后仅查找以’.json’结尾的文件: 现在,您可以使用pandas DataFrame.from_dict将json(此时为python字典)读入pandas数

  • 问题内容: 我对Json文件很陌生。如果我有一个包含多个json对象的json文件,例如: 我想将所有“时间戳记”和“有用性”提取到一个数据帧中: 有谁知道解决此类问题的一般方法? 问题答案: 使用json数组,格式为: 然后将其导入到您的python代码中 现在,数据的内容是一个带有字典的数组,字典表示每个元素。 您可以轻松访问它,即:

  • 我需要将对象保存在一个文件中。我使用GSON库。写入文件很容易,但是读取很复杂。我一个接一个地读取整个文件,但是这个解决方案效率很低。如何只读取一个JSON字符串?我不知道如何做得更好。请帮帮我。谢谢你

  • 我一直在努力阅读java项目中的文本文件,我一整天都在寻找解决方案,我尝试了很多方法,但没有一个有效。其中一些:(另外,我必须使用文件和扫描程序类) 异常线程"main"java.nio.file.NoSuchFileExc0019: test\fileTest.txt 异常线程"main"java.lang.NullPointerExc0019 线程“main”java中出现异常。木卫一。Fil

  • 我在on文件夹的几个zip文件中有几个csv文件,例如: null zip中的一个csv是这样工作的: 你知道如何优化这个循环吗?

  • 问题内容: 只是因为一个简单,易于表达的陈述使我的脸上有些错误,所以我有点头疼。 我有一个名为strings.json的json文件,如下所示: 我现在想读取json文件。我发现了以下这些语句,但是不起作用: 控制台上显示的错误是这样的: 已编辑 从更改为 并得到了这个: 问题答案: 该方法(“ load”中没有“ s”)可以直接读取文件: 您正在使用方法,该方法仅用于 字符串 参数。 编辑:新消