1

我正在尝试通过使用带有 curl 的 CrossRef API来获取本文的作者姓名。

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,但不知道如何获得:

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

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

4

3 回答 3

0

这是一种方法jq

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

输出:

"Fabio Facchinelli, Andreas P. M. Weber"
于 2017-06-05T18:28:52.813 回答
0

可以用 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.
于 2017-06-05T19:05:38.493 回答
0

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

 ... | jq '.author | map(.given + " " + .family) | join(", ")'
于 2017-06-17T12:21:26.407 回答