如何在golang框架中处理JSON分析错误?-Golang

首页 2024-07-03 21:51:12

在 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分析错误?详情请关注其他相关文章!


p