需要帮助以Go更新JSON负载

时间:2019-08-07 01:42:53

标签: json go

我是新手,尝试创建一个从一个端点读取的Golang脚本,然后更新某些字段并将其发布到另一个端点。到端点的PUT请求将此命令作为curl命令。

curl -v \
     -X PUT -H 'X-Api-Key:{Key}' \
     -H 'Content-Type: application/json' url/{id} \
     -d '{ "name" : "Somename", "type": "Sometype", "status" : "enabled"}'

我想在发送GET请求的端点中保留相同的名称和类型,但是在发布到另一个端点时,我想将状态从启用更改为禁用。因此,基本上我从一个端点获得的任何结果都将保持不变,除了需要更改为禁用状态。任何示例代码都将提供帮助。

这是我到目前为止的代码,但仅用于读取端点。所以不确定如何将两者结合。

func main() {
   req, _ := http.NewRequest("GET", "URL", nil)
   req.Header.Set("X-Api-Key", <Key>)
   resp, _ := http.DefaultClient.Do(req)

   defer resp.Body.Close()
   body, _ := ioutil.ReadAll(resp.Body)

   var obj struct {
       Library []struct {
           Name     string `json:"name"`
           Type      string `json:”type”`
           Status      string `json:”status"`
       } `json:”library"`
   }

   if err := json.Unmarshal(body, &obj); err != nil {
       panic(err)
   }
   for _, app := range obj.Library {
       fmt.Println(app.Name, app.Type, app.Status)
   }
}

1 个答案:

答案 0 :(得分:0)

您快到了,只需要遍历Library项目,更新状态并执行http put请求。

类似的东西应该可以工作(未经测试):

for _, item := range obj.Library {
  item.Status = "disabled"
  bs, err := json.Marshal(item)
  // check err
  req, err := http.NewRequest("PUT", "url", bytes.NewBuffer(bs)) 
  // check err
  res, err := http.DefaultClient.Do(req)
  // check err
  // check res.StatusCode
}