我正在用jq
开发一个Yelp语料库,拼命地想要完成一些连接和过滤任务。business.json包含类别和business_id,我可以从它们获取所有餐馆ids,使用这些ids筛选review.json来提取餐馆的所有评论。
在关系数据库管理系统中听起来很直接,但是我想学习jq
的方法。
有人能帮忙吗?
我试过的东西。
jq
是不可能的。jq --arg id $line '. | select( .business_id | contains($id))' reviews.json
根据评论编辑:
简化样本输入: 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
不起作用
发布于 2015-09-08 20:08:02
从你的描述中,我不清楚每个企业和每个评论是否都是一个顶级的对象。但是,您似乎可以将业务和评论都作为流来表示,因此,在下面,我将假设:
(a) both reviews.json and businesses.json are files of JSON objects;
(b) it is acceptable to read all the reviews into memory.
(反之,如果将业务读入内存是可以接受的,则可以很容易地修改以下内容。)
其逻辑是:阅读所有的评论,然后对每一家餐厅,提取该餐厅的评论。
select(.categories | index("Restaurant"))
| .business_id as $business_id
| $reviews[]
| select( .type == "review" and .business_id == $business_id)
调用:
$ jq --slurpfile reviews reviews.json yelp.jq businesses.json
请注意,JQ1.4中没有--slurpfile选项。
(如果reviews.json已经是JSON对象的数组,那么您可以使用--argfile reviews.json,因此不需要JQ1.5)。
https://stackoverflow.com/questions/32442433
复制相似问题