在 Bash 中我有一个包含 JSON 对象作为字符串的变量,例如:
{"results":[{"Name":"blah-1","Version":"1.0"},{"Name":"Some Other Name","Version":"2b- alpha"}]}
我是通过调用 curl
得到的。
我想将版本字符串放入 bash 数组中,这样当我调用 printf '%s\n' "${versions[@]}"
时,它会打印每个版本字符串行行:
1.0
2b-alpha
JSON 中可以出现任意数量的这些版本字符串。我该怎么做,可以用纯 bash 来完成还是我需要 grep
或 sed
以及命令是什么样的?
最佳答案
作为gniourf-gniourf
建议使用合适的 JSON
解析器,如 jq
进行解析,以获得更好的可维护性。做类似的事情
$ echo "$jsonString" | jq -r '.results[] | "\(.Version)"'
应该将内容打印为
1.0
2b-alpha
思路是jq
过滤器.results[] | "\(.Version)"
选择result下的所有节点,提取出其下所有Version
的名称。
要将其存储到数组中,请使用 process-substitution作为,
read -r -a jsonArray < <(echo "$jsonString" | jq -r '.results[] | "\(.Version)"')
并将数组内容打印为
printf '%s\n' "${jsonArray[@]}"
引用GitHub-jq-documentation下载说明页面。
关于linux - 提取 2 个子串之间的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41358533/