【问题标题】:Join and filter JSON files using jq使用 jq 加入和过滤 JSON 文件
【发布时间】:2015-09-09 04:08:02
【问题描述】:

我正在使用jq 开发一个 Yelp json 语料库,拼命地尝试完成一些加入和过滤任务。 business.json 包含 categoriesbusiness_id,我可以从中获取餐厅的所有 id,使用它们来过滤 review.json 提取餐厅的所有评论。

在 RDBMS 中听起来很简单,但我想学习 jq 方式。

谁能帮忙?

我尝试过的事情。

  1. 提取的企业 ID 并保存在 id.txt 中。但是在jq中引用id.txt是不可能的。

  2. 在脚本循环所有 id 并执行 jq --arg id $line '. | select( .business_id | contains($id))' reviews.json

  3. 加入这两个 json 文件也许是可能的,但我不愿意这样做,因为文件的大小 (~1G)

根据cmets编辑:

简化样本输入: 业务.json

{

“business_id”:“vcNAWiLM4dR7D2nwwJ7nCA”,

"full_address": "4840 E Indian School Rd\nSte 101\nPhoenix, AZ 85018", > >

“类别”:[“餐厅”]

}

reviews.json

{

“日期”:“2012-05-15”,

"text": "上周收到一封邮件,信中说 Goldberg 博士将于 6 月搬到亚利桑那州担任新职位。我们会非常想念他。\n\n我想找个新医生在纽约,你真正喜欢的可能几乎和找约会一样糟糕!",

“类型”:“评论”,

“business_id”:“vcNAWiLM4dR7D2nwwJ7nCA” }

最佳尝试: 能够对具有多个 id 的文档进行行进,例如

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

但无法用变量替换查询字符串,

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

【问题讨论】:

  • 请添加一个有意义的输入数据样本(即 JSON)以及您在 jq 中最有希望的尝试。
  • 感谢您的回复。我在原始帖子中进行了编辑。
  • 关于你的上一个 sn-p,使用 $t 而不是 env.t 应该可以工作。
  • 哦,是的,谢谢。然而,这并不是我所需要的。
  • 我也试过使用 while IFS='' read -r line || [[ -n "$line" ]];做; jq --arg id $line '. | select(.business_id | contains($id))' review.json done

标签: json jq


【解决方案1】:

根据您的描述,我不清楚每个业务和每个评论是否都是顶级对象。但是,您似乎可以安排业务和评论都可以作为流呈现,因此在下文中,我将假设:

(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

请注意,--slurpfile 选项在 jq 1.4 中不可用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多