使用Golang

时间:2020-05-31 12:45:45

标签: json go amazon-ec2 aws-sdk

大家好,我是一个尝试学习Go的初学者。我正在尝试使用带有Golang的AWS开发工具包来获取EC2实例的状态。我可以成功获取实例的JSON响应。但是,我在尝试解析JSON响应以获取实例状态时遇到问题。

以下是我如何获取JSON响应:

result, err := ec2Svc.DescribeInstanceStatus(input)

其中输入的类型为ec2.DescribeInstanceStatusInput

以下是我得到的JSON响应:

{
 "InstanceStatuses": [
  {
   "AvailabilityZone": "ap-southeast-2b",
   "Events": null,
   "InstanceId": "[VALIDIMAGEID]",
   "InstanceState": {
    "Code": 16,
    "Name": "running"
   },
   "InstanceStatus": {
    "Details": [
     {
      "ImpairedSince": null,
      "Name": "reachability",
      "Status": "passed"
     }
    ],
    "Status": "ok"
   },
   "OutpostArn": null,
   "SystemStatus": {
    "Details": [
     {
      "ImpairedSince": null,
      "Name": "reachability",
      "Status": "passed"
     }
    ],
    "Status": "ok"
   }
  }
 ],
 "NextToken": null
}

然后我将DescribeInstanceStatusOutput类型的结果解析为String,然后将其传递给函数parseJson,在此我尝试解析JSON。

result, err := ec2Svc.DescribeInstanceStatus(input)
    if err != nil {
        fmt.Println("Error", err)
    } else {
        parseJson(result.String())
        //fmt.Printf("%v\n", result)
    }

func parseJson(ec2StatusDescription string){
    //var x string = ec2StatusDescription.String()
    //fmt.Print(ec2StatusDescription)
    data := []byte(ec2StatusDescription)
    var instanceOutputs InstanceOutput
    json.Unmarshal(data, &instanceOutputs)
    fmt.Print(instanceOutputs.InstanceStatuses[0].InstanceState.Name)
}

type InstanceOutput struct {
    InstanceStatuses [] InstanceStatuses
    NextToken *string
}

type InstanceStatuses struct {
    AvailabilityZone string
    Events *string
    InstanceId string
    InstanceState InstanceState
    InstanceStatus InstanceStatus
    OutpostArn *string
    SystemStatus SystemStatus
}

type InstanceState struct {
    Code int
    Name string
}

type InstanceStatus struct {
    Details []   InstanceDetails
    Status string
}

type InstanceDetails struct {
    ImpairedSince *string
    Name string
    Status string
}

type SystemStatus struct {
    Details [] InstanceDetails
    Status string
}

我正在尝试打印实例状态,但是我一直使索引超出范围,这是因为未正确解析JSON。我在这里缺少什么导致json无法正确解析?还是我在这里做的事情完全弄错了?任何帮助将不胜感激。

0 个答案:

没有答案