一尘不染

golang无效字符'b'寻找值的开始

go

我正在尝试在其中发布带有xml消息的json。但是它返回

无效的字符“ b”正在寻找价值的起点

我认为可能的原因是我试图封送非json格式的return正文。

func (s *BackendConfiguration) Do(req *http.Request, v interface{}) error {
    log.Printf("Requesting %v %v%v\n", req.Method, req.URL.Host, req.URL.Path)
    start := time.Now()

    res, err := s.HTTPClient.Do(req)

    if debug {
        log.Printf("Completed in %v\n", time.Since(start))
    }

    if err != nil {
        log.Printf("Request to sakura failed: %v\n", err)
        return err
    }
    defer res.Body.Close()

    resBody, err := ioutil.ReadAll(res.Body)
    if err != nil {
        log.Printf("Cannot parse sakura response: %v\n", err)
        return err
    }

    if debug {
        log.Printf("sakura response: %q\n", resBody)
    }

    if v != nil {
        return json.Unmarshal(resBody, v)
    }

    return nil
}

错误发生在这一行

return json.Unmarshal(resBody, v)

阅读 217

收藏
2020-07-02

共1个答案

一尘不染

该错误表明服务器未返回有效的JSON响应。我建议添加以下代码来调试问题:

err := json.Unmarshal(resBody, v)
if err != nil {
    log.Printf("error decoding sakura response: %v", err)
    if e, ok := err.(*json.SyntaxError); ok {
        log.Printf("syntax error at byte offset %d", e.Offset)
    }
    log.Printf("sakura response: %q", resBody)
    return err
}
2020-07-02