在查询Gerrit时,他们有意在其api响应的开头放置了)]}'
,请参见:https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html。我正在尝试将其删除,以便JSON有效,但是我不确定在Go中执行此操作的最佳方法
这是我当前用于查询gerrit并从其json中提取changeID和状态的程序:
package main
import (
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"log"
"net/http"
)
type gerritData struct {
ChangeID string `json:"change_id"`
Status string `json:"status"`
}
func gerritQuery(gerrit string) (gerritData, error) {
username := "redacted"
password := "redacted"
client := &http.Client{}
req, err := http.NewRequest("GET", "https://gerrit.company.com/a/changes/?q="+gerrit, nil)
req.SetBasicAuth(username, password)
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
respBody, err := ioutil.ReadAll(resp.Body)
// Trying to cut it out manually.
respBody = respBody[:len(respBody)-4]
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
var gerritResponse gerritData
if err := json.NewDecoder(resp.Body).Decode(&gerritResponse); err != nil {
panic(err.Error())
}
return gerritResponse, nil
}
func main() {
gerritFlag := flag.String("gerrit", "foo", "The Gerrit you want to query")
flag.Parse()
gerritResponse, _ := gerritQuery(*gerritFlag)
fmt.Println(gerritResponse)
}
Go仍在抱怨panic: invalid character ')' looking for beginning of value
。我还是该语言的新手,所以任何建议都会很棒。
答案 0 :(得分:3)
问题中的代码从响应末尾修剪四个字节。
从响应开始处修剪字节:
respBoby = respBody[4:]