如何用jq从同一JSON查询中提取_id与Affiliation并生成CSV
合并jq查询生成包含_id和处理后Affiliation的CSV输出
问题说明
现有JSON数据结构如下:
{ "_index": "indexeer", "_type": "_doc", "_id": "3233233233", "_score": 1, "_source": { "Bibtex": { "Article": { "AuthorList": [ { "Affiliation": { "Affiliation": "Title content, Hematology and Hepatology Honorary Fellow, Honorary Member, American Society. xxxyyy@hotmail.com." } } ] } } } }
已经能单独提取处理后的Affiliation字段,以及单独提取_id字段,但需要把这两个结果合并,生成如下格式的CSV输出:
"3233233233", "Title content, Hematology and Hepatology Honorary Fellow, Honorary Member, American Society"
解决命令
直接用一条jq命令就能完成,核心是先保存_id的值,再处理Affiliation,最后拼接成目标格式:
基础实现
jq -r ' ._id as $id | ._source.Bibtex.Article.AuthorList[]? | .Affiliation.Affiliation | .[0:rindex(" Electronic address:")] as $affil | "\"\($id)\", \"\($affil)\"" ' results.json
标准CSV格式(自动处理特殊字符)
如果Affiliation字段里可能包含双引号这类特殊字符,用@csv过滤器能自动转义,输出更标准的CSV:
jq -r ' ._id as $id | ._source.Bibtex.Article.AuthorList[]? | .Affiliation.Affiliation | .[0:rindex(" Electronic address:")] as $affil | [$id, $affil] | @csv ' results.json
命令逻辑
- 先把当前数据的
_id存入变量$id,避免遍历数组时丢失这个值; - 遍历
AuthorList数组中的每个作者条目; - 提取并截取Affiliation字段的有效部分,存入
$affil; - 把两个变量组合成CSV格式的字符串输出。
内容的提问来源于stack exchange,提问作者JohnJ
相关产品推荐
相关产品推荐

