如何在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
nat123映射怎么用?超详细步骤,外网访问内网轻松搞定
nat123域名怎么用?两种方式轻松搞定
nat123怎么用?简单几步实现内网穿透
内网穿透工具对比:nat123、花生壳与轻量新选择
远程访问内网很简单:用对工具,一“箭”穿透
ngrok下载完全指南:从入门到获取客户端
内网远程桌面软件:穿透局域网边界的数字窗口
从外网远程访问内网服务器的完整方案
Windows Server 2008端口转发完全教程:netsh命令添加/查看/删除/重置
为什么三层交换机转发比Linux服务器快?转发表硬件加速的秘密