【发布时间】:2019-07-09 20:54:17
【问题描述】:
在查询 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 抱怨。我还是这门语言的新手,所以任何建议都会很棒。
【问题讨论】:
-
虽然我对 JavaScript 不太熟悉,但看起来你是在结尾处截掉一些字符,而不是在正文的开头。