Mongoexport 导出无效的 json 文件

Gra*_*man 4 python csv twitter json mongodb

我从 twitter API 收集了一些推文并将其存储到 mongodb,我尝试将数据导出到 JSON 文件并且那里没有任何问题,直到我尝试制作一个 python 脚本来读取 JSON 并将其转换为 csv . 我的代码收到此回溯错误:

json.decoder.JSONDecodeError: Extra data: line 367 column 1 (char 9745)
Run Code Online (Sandbox Code Playgroud)

因此,在互联网上挖掘之后,我被指出要检查在线验证器中的实际 JSON 数据,我做到了。这给了我以下错误:

Multiple JSON root elements
Run Code Online (Sandbox Code Playgroud)

来自网站https://jsonformatter.curiousconcept.com/

以下是文件开头/结尾的第一个/第二个对象的图片: 在此处输入图片说明 在此处输入图片说明

此处的数据链接

现在,问题是,我还没有在互联网上找到任何有关如何处理该错误的信息。我不确定这是我收集、导出的数据有问题,还是我不知道如何使用它。

我对这些推文的最终目的是制作一个网络图。我正在查看 Networkx 或 Gephi,这就是我想要获取 csv 文件的原因。

MYG*_*YGz 5

  1. 罗伯特·莫斯卡尔是对的。如果您可以在源头解决问题并在使用 mongoexport 时使用 --jsonArray 标志,那么我猜它会使问题变得更容易。如果您无法从源头解决它,请阅读以下几点。
  2. 下面的代码将从给定的文件中提取单个 json 对象并将它们转换为 python 字典。
  3. 然后,您可以将 CSV 逻辑应用于每个单独的字典。
  4. 如果您使用的是 csv 模块,那么我会说使用 unicodecsv 模块,因为它会处理您的 json 对象中的 unicode 数据。

import json

with open('path_to_your_json_file', 'rb') as infile:    
json_block = []        
for line in infile:            
    json_block.append(line)            
    if line.startswith('}'):                
        json_dict = json.loads(''.join(json_block))                         
        json_block = []
        print json_dict
Run Code Online (Sandbox Code Playgroud)

如果您想使用 Pandas 将其转换为 CSV,您可以使用以下代码:

import json, pandas as pd

with open('path_to_your_json_file', 'rb') as infile:
    json_block = []
    dictlist=[]
    for line in infile:
        json_block.append(line)
        if line.startswith('}'):
            json_dict = json.loads(''.join(json_block))
            dictlist.append(json_dict)
            json_block = []

df = pd.DataFrame(jsonlist)
df.to_csv('out.csv',encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)

如果你想扁平化 json 对象,你可以使用 pandas.io.json.json_normalize() 方法。