使用Bash修复多文件中App Store爬虫输出的JSON格式问题
解决方法
方案1:改Node.js脚本直接输出标准JSON
最省事的办法是直接在Node.js里把结果转成标准JSON输出,省得后面再折腾格式修复:
var store = require('app-store-scraper'); store.reviews({ id: 300238550, sort: store.sort.HELPFUL, page: 1 }) // 用JSON.stringify把评论数组转成标准JSON格式输出 .then(reviews => console.log(JSON.stringify(reviews))) .catch(err => console.error(err));
这样输出的内容直接是标准JSON,pandas.read_json能直接读,不用额外处理。
方案2:用Bash脚本修复字符串格式
要是不想改Node.js代码,就用下面的Bash命令链处理输出,搞定字符串多行、缺引号、带特殊字符的问题:
node your-review-script.js | \ # 合并被\n+拆分的多行字符串 sed '/\\n+$/ { :merge; N; s/\\n+//g; /\\n+$/ b merge; }' | \ # 删掉字符串里的撇号和双引号 sed "s/'//g; s/\"//g" | \ # 给非数字的键值加双引号(前提是你已经把键名改成带引号的格式了) sed -E 's/(".*"): ([^0-9][^,}]*)/\1: "\2"/'
各步骤说明:
- 第一步sed:循环把所有以
\n+结尾的行合并成一行,同时删掉\n+标记,解决字符串被拆分的问题。 - 第二步sed:全局删掉字符串里的撇号和双引号,避免后面加引号时出现语法冲突。
- 第三步sed:匹配已经带引号的键,给后面的非数字内容加双引号,确保符合JSON格式(像评分、ID这类数字值不用加引号)。
处理完的输出就能用pandas.read_json正常读取了。
内容的提问来源于stack exchange,提问作者Kyle Bailey
相关产品推荐
相关产品推荐

