如何从API URL导入JSON数据至MongoDB?编码错误问题解决
解决MongoDB导入JSON时的编码错误&API数据导入指南
嘿,咱们一步步搞定你遇到的问题——先解决那个烦人的编码错误,再教你从API把JSON数据导入MongoDB的正确姿势!
一、搞定「Invalid encoding, expecting UTF-8, UTF-16 or UTF-32」错误
这个错误的核心原因是:API返回的JSON数据编码不是MongoDB默认支持的UTF-8/16/32。咱们先确认编码,再转码就行:
1. 先检查数据的实际编码
先用curl把数据下载到本地,再检测编码(Linux/macOS自带file命令,Windows可以用Git Bash或者第三方工具):
# 下载API数据到本地文件 curl http://starlord.hackerearth.com/kickstarter > kickstarter_raw.json # 检测文件编码 file -I kickstarter_raw.json
执行后会输出类似 kickstarter_raw.json: text/plain; charset=iso-8859-1 的结果,这里的iso-8859-1就是当前的编码。
2. 转码为UTF-8
用iconv命令把数据转成MongoDB支持的UTF-8编码:
# 把原编码替换成你检测到的编码,比如iso-8859-1 iconv -f iso-8859-1 -t UTF-8 kickstarter_raw.json > kickstarter_utf8.json
转码后再用file -I kickstarter_utf8.json确认,输出显示charset=utf-8就ok了。
二、从API导入JSON到MongoDB的两种方法
方法1:先下载转码,再用mongoimport导入
转码完成后,直接用MongoDB自带的mongoimport工具导入:
# 替换成你的数据库名和集合名 mongoimport --db my_kickstarter_db --collection projects --file kickstarter_utf8.json --jsonArray
⚠️ 注意:如果API返回的是JSON数组(多个对象用[]包裹),必须加--jsonArray参数;如果是单个JSON对象,去掉这个参数就行。
方法2:一步到位——通过管道直接导入(不用存本地文件)
不想保存本地文件的话,直接用管道把curl的输出转码后传给mongoimport:
# 同样替换原编码、数据库名、集合名 curl http://starlord.hackerearth.com/kickstarter | iconv -f iso-8859-1 -t UTF-8 | mongoimport --db my_kickstarter_db --collection projects --jsonArray
这个命令会直接把API返回的数据转码后导入MongoDB,省了中间存文件的步骤。
三、验证导入是否成功
导入完可以进MongoDB Shell看看数据:
# 启动MongoDB Shell mongo # 切换到目标数据库 use my_kickstarter_db # 查看前5条数据,确认导入成功 db.projects.find().limit(5)
如果能看到正常的文档数据,就说明导入成功啦!
内容的提问来源于stack exchange,提问作者stone rock
相关产品推荐
相关产品推荐

