首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用jq连接和过滤JSON文件

使用jq连接和过滤JSON文件
EN

Stack Overflow用户
提问于 2015-09-07 15:58:51
回答 1查看 1.2K关注 0票数 2

我正在用jq开发一个Yelp语料库,拼命地想要完成一些连接和过滤任务。business.json包含类别business_id,我可以从它们获取所有餐馆ids,使用这些ids筛选review.json来提取餐馆的所有评论。

在关系数据库管理系统中听起来很直接,但是我想学习jq的方法。

有人能帮忙吗?

我试过的东西。

  1. 提取业务ID并保存在id.txt中。但是,在id.txt中jq是不可能的。
  2. 在脚本中循环所有ids并执行jq --arg id $line '. | select( .business_id | contains($id))' reviews.json
  3. 加入两个json文件可能是可能的,但由于文件的大小(~1G),我不愿意这样做。

根据评论编辑:

简化样本输入: business.json

{ Business_id:"vcNAWiLM4dR7D2nwwJ7nCA", "full_address":"4840 E印度学校路\n斯特101\n菲尼克斯,AZ 85018“>”类别“:”餐厅“ }

reviews.json

{ “日期”:"2012-05-15", “短信”:“上周收到一封信,信上说戈德伯格博士将在六月搬到亚利桑那州去找一份新工作。他会非常想念他的。\n\n\n我认为在纽约找一位你真正喜欢的新医生可能就像想找个约会一样糟糕!” “类型”:“审查”, "business_id":"vcNAWiLM4dR7D2nwwJ7nCA“}

最佳调度:能够使用多个ids来处理文档,如

jq '. | select( .business_id | contains("LRKJF43s9-3jG9Lgx4zODg", "uGykseHzyS5xAMWoN6YUqA"))' reviews.json

但不能用变量替换查询字符串,

jq --arg t vcNAWiLM4dR7D2nwwJ7nCA '. | select( .business_id | contains(env.t))' reviews.json不起作用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 20:08:02

从你的描述中,我不清楚每个企业和每个评论是否都是一个顶级的对象。但是,您似乎可以将业务和评论都作为流来表示,因此,在下面,我将假设:

代码语言:javascript
运行
复制
(a) both reviews.json and businesses.json are files of JSON objects;
(b) it is acceptable to read all the reviews into memory.

(反之,如果将业务读入内存是可以接受的,则可以很容易地修改以下内容。)

其逻辑是:阅读所有的评论,然后对每一家餐厅,提取该餐厅的评论。

代码语言:javascript
运行
复制
select(.categories | index("Restaurant"))
| .business_id as $business_id
| $reviews[]
| select( .type == "review" and .business_id == $business_id)

调用:

代码语言:javascript
运行
复制
$ jq --slurpfile reviews reviews.json yelp.jq businesses.json

请注意,JQ1.4中没有--slurpfile选项。

(如果reviews.json已经是JSON对象的数组,那么您可以使用--argfile reviews.json,因此不需要JQ1.5)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32442433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档