在 go 中处理 json 解析错误的几种方法:使用 error 值,检查 json 解析函数返回的错误值。使用 json.decoder,逐步处理解析过程中发生的错误。创建自定义类型(如 jsonerror)封装错误信息,用于自定义错误处理。

Go 中处理 JSON 解析错误
在 Go 中处理 JSON 解析错误时,有几种方法可供选择:
1. 使用 error 值
立即学习“go语言免费学习笔记(深入)”;
JSON 解析函数(例如 json.Decode 和 json.Unmarshal) 会返回一个 error 值,指示是否存在错误。如果解析成功,则错误值为 nil。
import "encoding/json"
func main() {
jsonStr := `{ "name": "John", "age": 30 }`
var data map[string]interface{}
if err := json.Unmarshal([]byte(jsonStr), &data); err != nil {
// 处理错误
panic(err)
}
// 访问解析后的数据
name := data["name"].(string)
age := data["age"].(float64)
println("Name:", name, "Age:", age)
}2. 使用 json.Decoder
json.Decoder 提供了一种流传输式解析方法,它允许您在解析过程中逐步处理错误。
import "encoding/json"
func main() {
dec := json.NewDecoder(os.Stdin)
for {
var data map[string]interface{}
if err := dec.Decode(&data); err != nil {
// 处理错误
if err == io.EOF {
break
}
panic(err)
}
// 访问解析后的数据
name := data["name"].(string)
age := data["age"].(float64)
println("Name:", name, "Age:", age)
}
}3. 自定义类型
如果您经常需要处理 JSON 解析错误,可以创建自定义类型来封装错误信息。
type JSONError struct {
err error
line, column int
}
func (e *JSONError) Error() string {
return fmt.Sprintf("JSON error at line %d, column %d: %v", e.line, e.column, e.err)
}然后,您可以在解析时使用此类型:
import (
"encoding/json"
)
func main() {
jsonStr := `{ "name": "John", "age": 30 }`
var data map[string]interface{}
dec := json.NewDecoder(strings.NewReader(jsonStr))
for dec.More() {
err := dec.Decode(&data)
if err == io.EOF {
break
}
if err != nil {
// 处理错误
jsonErr := &JSONError{
err: err,
line: dec.InputOffset() - 1,
column: dec.BufferedOffset() - dec.InputOffset(),
}
panic(jsonErr)
}
// 访问解析后的数据
name := data["name"].(string)
age := data["age"].(float64)
println("Name:", name, "Age:", age)
}
}以上就是golang框架中如何处理JSON解析错误?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号