相关文章推荐
{"status":
    {"reqStatus":"SUCCESS",
            "credentials":"R3DMPF8VIAKG6xLa5vOlp7kqmqE.*AAJTSQACMDIAAlNLABxXVVhKZkJhMmVOL1ZJQWhRUTBYTGY1V2w2TjA9AAR0eXBlAANDVFMAAlMx*****..*",
                    "msgs":[{"msgCode":"ECMSE103",
                            "msgText":"User %A1% was authenticated successfully.",
                            "msgValues":["Tnt_PDU-CD_N53-vPOD4_EO1"]}]

我的目录中有这个json文件,我只想读取这个json文件并有凭证, 我只是想在运行shell脚本代码时将这个键值存储在变量中。

json
linux
shell
scripting
devops
pushapak kumar
pushapak kumar
发布于 2022-05-03
4 个回答
Rshad Zhran
Rshad Zhran
发布于 2022-05-04
已采纳
0 人赞同

首先,我建议你使用一个JSON格式化器来格式化你的JSON,如https://jsonformatter.curiousconcept.com.

现在,让我们考虑文件test.json,它包含你的JSON数据。

╰─$ cat test.json
   "status":{
      "reqStatus":"SUCCESS",
"credentials":"R3DMPF8VIAKG6xLa5vOlp7kqmqE.AAJTSQACMDIAAlNLABxXVVhKZkJhMmVOL1ZJQWhRUTBYTGY1V2w2TjA9AAR0eXBlAANDVFMAAlMx**..*",
      "msgs":[
            "msgCode":"ECMSE103",
            "msgText":"User %A1% was authenticated successfully.",
            "msgValues":[
               "Tnt_PDU-CD_N53-vPOD4_EO1"

为了用bash解析这个JSON,我们可以使用工具jq,你可以通过运行来安装,例如在Ubuntu。

sudo apt-get install jq

一旦工具可用,你可以运行以下内容来获得Credentials字段。

CREDENTIALS=$(cat test.json | jq -r ".status.credentials")

要验证这一点,请运行。

╰─$ echo $CREDENTIALS
R3DMPF8VIAKG6xLa5vOlp7kqmqE.AAJTSQACMDIAAlNLABxXVVhKZkJhMmVOL1ZJQWhRUTBYTGY1V2w2TjA9AAR0eXBlAANDVFMAAlMx**..*
    
这很好,拉沙德-兹兰
ufopilot
ufopilot
发布于 2022-05-04
0 人赞同
CREDENTIALS=$(awk -F\" '/credentials/ {print $4}' file.json)
    
虽然这个代码可能会解决这个问题。包括解释的方式和原因来解决这个问题,将真正有助于提高你的文章的质量。记住,你是在为未来的读者回答问题,而不仅仅是现在的提问者。请edit你的答案要增加解释,并说明有哪些限制和假设。
RARE Kpop Manifesto
RARE Kpop Manifesto
发布于 2022-05-04
0 人赞同

使用FSOFSNF来做所有的艰苦工作,因为只有匹配的行会有NF = 3,而其他非空行会有1或2。

 input : 
 {"status":
    {"reqStatus":"SUCCESS",
            "credentials":"R3DMPF8VIAKG6xLa5vOlp7kqmqE.*AAJTSQACMDIAAlNLABxXVVhKZkJhMmVOL1ZJQWhRUTBYTGY1V2w2TjA9AAR0eXBlAANDVFMAAlMx*****..*",
                    "msgs":[{"msgCode":"ECMSE103",
                            "msgText":"User %A1% was authenticated successfully.",
                            "msgValues":["Tnt_PDU-CD_N53-vPOD4_EO1"]}]
 command :
  mawk 'NF*=2<NF' FS='^.*["]credentials["][ \t]*[:][ \t]*["]|["].*$' OFS= 
 output :
R3DMPF8VIAKG6xLa5vOlp7kqmqE.*AAJTSQACMDIAAlNLABxXVVhKZkJhMmVOL1ZJQWhRUTBYTGY1V2w2TjA9AAR0eXBlAANDVFMAAlMx*****..*
    
Shakiba Moshiri
Shakiba Moshiri
发布于 2022-05-04
0 人赞同

随着jq的+ read和过程替换或命令替换

read var < <(jq '.status.credentials' file.json);
 
推荐文章