Mongoexport导出无效的json文件

时间:2016-11-21 01:46:40

标签: python json mongodb csv twitter

我从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/

以下是第一个/第二个对象开头/结尾的图片: enter image description here enter image description here

或指向数据here

的链接

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

我对这些推文的最终结果是制作网络图。我正在寻找Networkx或Gephi,这就是为什么我想获得一个csv文件。

3 个答案:

答案 0 :(得分:2)

  1. Robert Moskal是对的。如果您可以在源代码处理问题并在使用mongoexport时使用--jsonArray标志,那么我猜它会使问题更容易。如果您无法在源头处理,请阅读以下几点。
  2. 下面的代码将从给定文件中提取单个json对象,并将它们转换为python词典。
  3. 然后,您可以将CSV逻辑应用于每个字典。
  4. 如果您正在使用csv模块,那么我会说使用unicodecsv模块,因为它会处理json对象中的unicode数据。
  5. 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()方法。

答案 1 :(得分:1)

详细说明@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

答案 2 :(得分:0)

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

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

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