如何在bash脚本中的json中查找键值的值

HHH*_*HHH 4 bash awk json

我正在尝试使用 make s curl 调用编写一个 bash 脚本并取回一个 json 文档。json 文档有一个名为的键access_token,我需要提取该字段的值。这是我的json文档

echo $json

{"access_token":"kjdshfsd", "key2":"value"}
Run Code Online (Sandbox Code Playgroud)

我没有jq安装。

小智 19

jqawksed

#!/bin/bash
json='{"access_token":"kjdshfsd", "key2":"value"}' 
    
echo $json | grep -o '"access_token":"[^"]*' | grep -o '[^"]*$'
Run Code Online (Sandbox Code Playgroud)

在这里测试和工作: https: //ideone.com/Fw4How

来源: https: //brianchildress.co/parse-json-using-grep


jes*_*e_b 8

简短的回答:安装 jq

你不应该在没有 json 解析器的情况下解析 json。

要做到这一点jq

echo "$json" | jq -r '.access_token'
Run Code Online (Sandbox Code Playgroud)

我首选的 json 解析器是json,使用它你可以:

echo "$json" | json access_token
Run Code Online (Sandbox Code Playgroud)

注意:这两个解决方案都假设您的 json 对象与您在示例中显示的完全相同(或至少几乎完全相同),我知道事实并非如此。

  • @HHH 另请注意,`jq` [可以下载](https://stedolan.github.io/jq/),其形式不需要 root 访问权限即可安装。当您将“jq”下载到主目录并从那里使用它会更好时,确实_没有理由_自己编写一个糟糕的 JSON 解析器。 (3认同)