2016-08-18 58 views
1

在Bash中,我将响应数据保存到变量中。在Bash中提取JSON值

结果看起来是这样的:

{"token_type":"Bearer","access_token":"022-8baa5324-f57b-445d-c5ec-821c63a5fd35","expires_in":3600,"scope":"any-website.com"} 

现在我想访问令牌的值提取到的其他变种。

在Linux中我解决了,通过这种方式,它的工作原理:

echo "$response_json" | grep -oP '(?<="access_token":")[^"]*' 

至于结果,我得到:

022-8baa5324-f57b-445d-c5ec-821c63a5fd35 

我的问题是MacOS的不支持的grep参数P(Perl表达式)了。参数E不适用于该表达式。

我将不胜感激任何解决方案的帮助,而无需安装额外的Bash工具。

回答

1

大家都说他们不想安装新工具,但是像grep这样的面向行的工具的设计根本不是为了处理像JSON这样的结构化文本。如果您要使用JSON,请获取专门用于处理它的工具。

jq就是这样一个选项:

$ echo "$response_json" | jq -r '.access_token' 
022-8baa5324-f57b-445d-c5ec-821c63a5fd35