使用Shell脚本解析JSON响应

时间:2019-12-18 09:09:47

标签: json linux shell

{
    "PlatformID": 1024,
    "SystemId": 11640,
    "SystemName": "010.10.10.10",
    "DomainName": null,
    "AccountId": 15631,
    "AccountName": "merg1",
    "AccountNameFull": "merg1",
    "ApplicationID": null,
    "ApplicationDisplayName": null,
    "MaximumReleaseDuration": 120,
    "MaxReleaseDurationDays": 0,
    "MaxReleaseDurationHours": 2,
    "MaxReleaseDurationMinutes": 0,
    "InstanceName": "",
    "DefaultReleaseDuration": 120,
    "DefaultReleaseDurationDays": 0,
    "DefaultReleaseDurationHours": 2,
    "DefaultReleaseDurationMinutes": 0,
    "LastChangeDate": "2019-08-21T10:53:25.237",
    "NextChangeDate": null,
    "IsChanging": false,
    "IsISAAccess": false,
    "PreferredNodeID": "3ef3e7c7-5851-451b-b1a4-c62556b588ce"
}

我在不使用jq工具的情况下从上述JSON响应中查找“ SystemId和AccountId”。

请提供有关Shell脚本的帮助。谢谢。

3 个答案:

答案 0 :(得分:1)

您可以在以下用法上使用grep

grep -E -- 'AccountId|SystemId' t.txt | awk '{print $2}'
11640,
15631,

或者,如果您想使用jq,可以尝试一下。

cat t.txt | jq '.AccountId , .SystemId'
15631
11640

答案 1 :(得分:0)

如果您确定json文件的结构,并且应该执行以下步骤(这要求对键和值始终在同一行上-否则,我们需要删除前后的空白结肠)

  1. 将每个字段分隔到单独的行
  2. 使用grep提取包含SystemIdAccountId的行
  3. 使用awk提取该行中的第二个字段(以冒号分隔)
cat a.json | tr , '\n' | grep SystemId | awk -F ':' '{print $2}'
11640

cat a.json | tr , '\n' | grep AccountId | awk -F ':' '{print $2}'
15631

已编辑:如果json位于变量中,则需要将输出保存到变量:

#!/bin/bash

JSON=$(cat a.json)


sysID=$(echo $JSON | tr , '\n' | grep SystemId | awk -F ':' '{print $2}')
accID=$(echo $JSON | tr , '\n' | grep AccountId | awk -F ':' '{print $2}')

echo "System ID = $sysID, Account ID = $accID"

# output
# System ID =  11640, Account ID =  15631

答案 2 :(得分:0)

uvicorn main:app --reload

这对我有用...!不使用jq工具