使用jq获取值,然后使用该值作为键获取另一个值

时间:2019-03-31 19:12:33

标签: json web-scraping jq

我有数百个分类ID,我正在使用curljqhttp://taxonomy.jgi-psf.org/tax/accession中提取相关值。

是否有一种方法可以将jq传递给自身,以便可以将“ level”的值用作另一个查询的键?

对于此示例,我想将这两个命令组合为一个:

$ curl -s http://taxonomy.jgi-psf.org/tax/tax_id/48479 | jq '.[] | .level'

“无排名”

$ curl -s http://taxonomy.jgi-psf.org/tax/tax_id/48479 | jq '.[] | ."no rank".name'

“环境样本”

2 个答案:

答案 0 :(得分:2)

您可以将level属性值用作键:

$ curl -s http://taxonomy.jgi-psf.org/tax/tax_id/48479 | jq '.[] | .["\(.level)"].name'
"environmental samples"

答案 1 :(得分:0)

如果愿意,这是您要问的另一种解决方案:使用 jtc unix实用程序:

bash $ curl -s http://taxonomy.jgi-psf.org/tax/tax_id/48479 | jtc -w'<level>l<val>v[^0]<val>t[name]'
"environmental samples"
bash $ 

分解步行路径(-w)

  • <level>l通过标签level查找JSON元素
  • <val>v-在名称空间中以val的名称存储发现的值(可以是任何值)
  • [^0]将搜索路径重置回JSON根
  • <val>t通过以val存储在名称空间中的标签(标签)查找JSON元素
  • [name]从找到的JSON对象中选择name记录