2016-08-18 124 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