dou4121 2019-08-07 01:42
浏览 42
已采纳

需要帮助以Go更新JSON负载

I am a newbie and trying to create a Golang script that reads from one endpoint then updates some of the fields and posts to a different endpoint. The PUT request to the endpoint has this as a curl command.

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

I want to keep the same name and same type from the endpoint that I send the GET request, but I want to change status from enabled to disabled when posting to the other endpoint. So basically whatever results I get from the one endpoint will stay the same except the status that I need to change to disabled. Any example code will assist.

This is the code I have so far but it is just for reading the endpoint. So not sure how to join the two.

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条回答 默认 最新

  • duanji2772 2019-08-07 02:19
    关注

    You are almost there, just need to loop over the Library items, updating the status and doing the http put requests.

    Something like this should work (not tested):

    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
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 在不同的执行界面调用同一个页面
  • ¥20 基于51单片机的数字频率计
  • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
  • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
  • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
  • ¥15 C++map释放不掉
  • ¥15 Mabatis查询数据
  • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
  • ¥15 关于E22-400T22S的LORA模块的通信问题
  • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路