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
将somecollection
、somedb
和validfile.json
分别替换为您的目标集合、目标数据库和所需的输出文件名。
以下内容:mongoexport --collection=somecollection --db=somedb --out=validfile.json
...不会为您提供您正在寻找的结果,因为:
默认情况下,mongoexport 使用一个 JSON 文档为每个 MongoDB 文档。 Ref
【讨论】:
以上是关于Mongoexport 导出无效的 json 文件的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb数据导出命令mongoexport和导入命令mongoimport介绍
mongodb之mongoexport 和mongoimport介绍