Mongoexport 导出无效的 json 文件

Posted

技术标签:

【中文标题】Mongoexport 导出无效的 json 文件【英文标题】:Mongoexport exporting invalid json files 【发布时间】:2017-04-04 08:17:03 【问题描述】:

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

json.decoder.JSONDecodeError: Extra data: line 367 column 1 (char 9745)

因此,在浏览了互联网之后,有人指出我在在线验证器中检查了实际的 JSON 数据,我确实这样做了。这给了我以下错误:

Multiple JSON root elements

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

以下是文件开头/结尾的第一个/第二个对象的图片:

或数据链接here

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

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

【问题讨论】:

我很惊讶。能把导出的json文件的开头和结尾贴一下吗? @RobertMoskal 我用文件的图片更新了原始帖子。由于数据中的某些链接被缩短,*** 不允许我发布代码。 请将示例数据上传到某个文件共享网站并分享链接。 @MohammadYusufGhazi 这里是指向数据的链接mediafire.com/?8nwiv7noboccuj4 不幸的是它对于 pastebin 来说太大了 Export valid json from mongodb collection 的可能重复项。该线程有你需要的答案。 【参考方案1】:
    罗伯特·莫斯卡尔是对的。如果您可以从源头解决问题并在使用 mongoexport 时使用 --jsonArray 标志,那么我猜它会使问题变得更容易。如果您无法从源头解决问题,请阅读以下几点。 下面的代码将从给定文件中提取单个 json 对象并将它们转换为 python 字典。 然后您可以将 CSV 逻辑应用到每个单独的字典。 如果您使用的是 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

如果您想使用 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')

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

【讨论】:

【参考方案2】:

回复有点晚,我不确定发布此问题时是否可用。无论如何,现在有一个简单的方法来导入mongoexport json数据如下:

df = pd.read_json(filename, lines=True)

mongoexport 将每一行作为 json 对象本身提供,而不是将整个文件作为 json 提供。

【讨论】:

【参考方案3】:

详细说明@MYGz 建议使用--jsonArray

您的帖子未显示您如何从 mongo 导出数据。如果您通过终端使用以下内容,您将从 mongodb 获得有效的 json:

mongoexport --collection=somecollection --db=somedb --jsonArray --out=validfile.json 

somecollectionsomedbvalidfile.json 分别替换为您的目标集合、目标数据库和所需的输出文件名。

以下内容:mongoexport --collection=somecollection --db=somedb --out=validfile.json...不会为您提供您正在寻找的结果,因为:

默认情况下,mongoexport 使用一个 JSON 文档为每个 MongoDB 文档。 Ref

【讨论】:

以上是关于Mongoexport 导出无效的 json 文件的主要内容,如果未能解决你的问题,请参考以下文章

mongodb-导出数据到csv文件或json文件

Mongodb数据导出命令mongoexport和导入命令mongoimport介绍

mongodb之mongoexport 和mongoimport介绍

Mongodb数据导出工具mongoexport和导入工具mongoimport使用

mongo导入导出命令

MongoDB数据导出导入及索引建立