3 回答

TA貢獻1744條經(jīng)驗 獲得超4個贊
首先,正如已評論的那樣,您確定不能go/build直接使用該包而不是運行g(shù)o list嗎?
我不會在 HTTP 處理程序中使用println(或fmt.Println)。使用log.Println和/或?qū)㈠e誤放入ResponseWriter. 此外,最好ListenAndServe用log.Fatal.
打印/記錄error值時,您可以只使用err,無需使用err.Error().
此外,當您實際上想要做一些比報告/記錄錯誤消息更詳細的事情時,您可以查看它的類型和其他信息。例如,log.Printf("verbose error info: %#v", err)給出:
&json.SyntaxError{msg:"invalid character ',' looking for beginning of value", Offset:0}
我試過這個是因為我知道json包返回各種錯誤類型和附加信息,我希望偏移值會有所幫助。如果是這樣,那么這樣的事情可能會有所幫助:
if err := json.Compact(…) {
if err != nil {
log.Println("json.Compact:", err)
if serr, ok := err.(*json.SyntaxError); ok {
log.Println("Occurred at offset:", serr.Offset)
// … something to show the data in buff around that offset …
}
}
}
但偏移零沒有幫助:(
因此,盡管這不能確定您的問題,但希望它可以對您的進一步調(diào)查有所幫助。
編輯:
所以添加后:
log.Println("Write file:", ioutil.WriteFile("data.json", buff.Bytes(), 0600))
對于上面的錯誤處理塊,我然后在結(jié)果文件上運行了一個 JSON 驗證器,它識別了這一部分:
"XTestImports": [
"io",
"log",
"net"
]
},,{
"Dir": "/usr/local/go/src/mime",
"ImportPath": "mime",
"Name": "mime",
注意雙,,.
這應該告訴您代碼中的錯誤是什么。但如果沒有,您需要在處理t.J或構(gòu)建時跳過空條目。后者更好,只涉及:
if len(newj) > 0 {
myObj.J = append(myObj.J, newj)
}
(順便說一句,您不檢查錯誤,json.Unmarshal因此不清楚它是否應該為空或由于前面的錯誤而為空。永遠不要忽略錯誤返回?。?/p>

TA貢獻1817條經(jīng)驗 獲得超14個贊
我在 Go 程序中也遇到了同樣的錯誤消息,但是當我的 HTTP 響應解析器期望 JSON 時,錯誤消息在 HTTP 響應錯誤中,采用 HTML 格式。
對我來說,解決方案是更改我的請求以包括將Content-Type
標頭設置為application/json
. 您如何執(zhí)行此操作取決于您碰巧使用的是哪個 http 客戶端庫;如果您有權(quán)訪問http.Header
核心類型,則可以使用.Set(...)
.
我意識到這個修復對我來說的范圍可能不適用于最初的問題,但我在谷歌搜索后首先來到這里并認為這會幫助其他人,因為乍一看消息并不是特別明顯。提示是無效<
字符是錯誤/響應中的第一個 HTML 字符,這很可能是請求類型未設置為 的結(jié)果application/json
,因此服務器以非 JSON 響應進行響應。
- 3 回答
- 0 關(guān)注
- 318 瀏覽
添加回答
舉報