从CrossRef获取作者姓名(从JSON中获取文本)

从CrossRef获取作者姓名(从JSON中获取文本),json,string,bash,jq,doi,Json,String,Bash,Jq,Doi,我试图通过使用CrossRef API和curl来获取的作者名称 curl -LH "Accept: application/citeproc+json" http://dx.doi.org/10.3389/fpls.2011.00050 | jq .author 当然,我会得到一个JSON作为响应,但需要纯文本进行进一步的bash处理: [ { "given": "Fabio", "family": "Facchinelli", "affiliation": []

我试图通过使用CrossRef API和curl来获取的作者名称

curl -LH "Accept: application/citeproc+json" http://dx.doi.org/10.3389/fpls.2011.00050 | jq .author
当然,我会得到一个JSON作为响应,但需要纯文本进行进一步的bash处理:

[
  {
    "given": "Fabio",
    "family": "Facchinelli",
    "affiliation": []
  },
  {
    "given": "Andreas P. M.",
    "family": "Weber",
    "affiliation": []
  }
]
我曾想过使用jq,但不知道如何获得:

“法比奥·法奇内利,安德烈亚斯·p·M·韦伯”


你知道一个解决方案吗(不能是jq)?

这里有一种方法可以通过
jq
实现这一点:

... | jq '.author[] | .given + " " + .family' | jq -s 'join(", ")'
产出:


有一种方法可以通过
jq

... | jq '.author[] | .given + " " + .family' | jq -s 'join(", ")'
产出:


可以使用sed脚本执行此操作:

$ cat json.sed
/"given":/{
    s/^.*"given"://
    s/[",]//g
    h
}
/"family":/{
    s/^.*"family"://
    s/[",]//g
    G
    s/\n/, /
    p
}
那么就这样称呼它:

$ sed -n -f json.sed curl.json 
 Facchinelli,  Fabio
 Weber,  Andreas P. M.

可以使用sed脚本执行此操作:

$ cat json.sed
/"given":/{
    s/^.*"given"://
    s/[",]//g
    h
}
/"family":/{
    s/^.*"family"://
    s/[",]//g
    G
    s/\n/, /
    p
}
那么就这样称呼它:

$ sed -n -f json.sed curl.json 
 Facchinelli,  Fabio
 Weber,  Andreas P. M.

只需调用一次jq即可完成此任务:

 ... | jq '.author | map(.given + " " + .family) | join(", ")'

只需调用一次jq即可完成此任务:

 ... | jq '.author | map(.given + " " + .family) | join(", ")'