首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从JSON Shell命令中分离对象

从JSON Shell命令中分离对象
EN

Stack Overflow用户
提问于 2018-10-24 02:30:07
回答 1查看 33关注 0票数 0

我有一个JSON数组,如下所示。

代码语言:javascript
复制
[ { "release": "2008.1006", "kernel": "2.6.32-754.3.5", "os": "6.10", "current": true }, { "release": "2008.1006", "kernel": "3.10.0-862.14.4", "os": "7.5", "current": true } ]

当我使用${#array[@]}打印数组长度时,结果是1。我想要一个包含使用shell脚本的数组中存在的对象的数组。

我想要一个花括号下的对象数组。我尝试了很多次,但没有得到任何想要的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-24 06:17:51

代码语言:javascript
复制
s='[ { "release": "2008.1006", "kernel": "2.6.32-754.3.5", "os": "6.10", "current": true }, { "release": "2008.1006", "kernel": "3.10.0-862.14.4", "os": "7.5", "current": true } ]'
IFS=$'\n' read -r -d '' -a items < <(jq -c '.[]' <<<"$s" && printf '\0')

echo "Number of items: ${#items[@]}"
(( ${#items[@]} )) && printf ' - %s\n' "${items[@]}"

...properly发出:

代码语言:javascript
复制
Number of items: 2
 - {"release":"2008.1006","kernel":"2.6.32-754.3.5","os":"6.10","current":true}
 - {"release":"2008.1006","kernel":"3.10.0-862.14.4","os":"7.5","current":true}

如果只支持bash4.0或更高版本,您可以用readarray -t替换read -a (尽管如果jq调用失败,这将不再传递不成功的退出状态):

代码语言:javascript
复制
readarray -t items <<<"$(jq -c '.[]' <<<"$s")"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52955666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档