gpt4 book ai didi

json - 从 Golang 调试 JSON 错误

转载 作者:IT王子 更新时间:2023-10-29 01:38:53 27 4
gpt4 key购买 nike

我正在获取并解码一个包含错误的大型 JSON 响应。现在我需要找到错误的位置!我 read about json.SyntaxError但我正在努力寻找如何使用它。

package main

import (
"encoding/json"
"fmt"
"net/http"
"os"
"text/template"
"time"
)

type Movie struct {
Title string `json:"title"`
PublishedAt time.Time `json:"published_at"`
}

func main() {
req, _ := http.NewRequest("GET", "https://s.natalian.org/2016-12-07/debugme2.json", nil)
resp, err := http.DefaultClient.Do(req)

defer resp.Body.Close()
dec := json.NewDecoder(resp.Body)

_, err = dec.Token()
for dec.More() {
var m Movie
if err = dec.Decode(&m); err != nil {
fmt.Println(err)
fmt.Println("Bad", m)

// https://blog.golang.org/error-handling-and-go
if serr, ok := err.(*json.SyntaxError); ok {
fmt.Println("Syntax error", serr)
}

} else {
fmt.Println("Good", m)
}

tmpl := template.Must(template.New("test").Parse("OUTPUT: {{ if .Title }}{{.Title}}{{ if .PublishedAt }} was published at {{.PublishedAt}} {{ end }}{{end}}\n"))
tmpl.Execute(os.Stdout, m)
}

}

我错过了什么?任何工具或策略或建议将不胜感激。我的输出目前看起来像:

Good {foobar 2016-11-24 16:17:12 +0800 SGT}
OUTPUT: foobar was published at 2016-11-24 16:17:12 +0800 SGT
parsing time ""null"" as ""2006-01-02T15:04:05Z07:00"": cannot parse "null"" as "2006"
Bad {barbar 0001-01-01 00:00:00 +0000 UTC}
OUTPUT: barbar was published at 0001-01-01 00:00:00 +0000 UTC
Good { 1999-12-24 16:11:12 +0200 +0200}
OUTPUT:
Good {Something else entirely 2000-01-24 16:11:12 +0200 +0200}
OUTPUT: Something else entirely was published at 2000-01-24 16:11:12 +0200 +0200

但我的 stderr 中需要这样的东西来更好地调试问题:

Line 8: published_at is invalid

也许还有标题的一些上下文,这样我就可以告诉 API 后端团队他们的 JSON 响应中有错误。

奖励问题:此外,我不想打印值 0001-01-01 00:00:00 +0000 UTC,因为它实际上是空的。我实际上并不介意它丢失。

最佳答案

我找到了一些解决方案:

if err := json.Unmarshal([]byte(data), &myStruct); err != nil {
if jsonErr, ok := err.(*json.SyntaxError); ok {
problemPart := data[jsonErr.Offset-10 : jsonErr.Offset+10]
err = fmt.Errorf("%w ~ error near '%s' (offset %d)", err, problemPart, jsonErr.Offset)
}
}

它会打印类似的东西

invalid character 'n' after object key:value pair ~ error near 'rence\","numberOfBil' (offset 14557)

关于json - 从 Golang 调试 JSON 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41012247/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com