go之json使用

简介: go之json使用

一、使用内置工具

 
import (
  "encoding/json"
  "fmt"
  "testing"
)
 
//使用FeildTag标识对应的json
type BasicInfo struct {
  Name string `json:"name"`
  Age  int    `json:"age"`
}
type JobInfo struct {
  Skills []string `json:"skills"'`
}
type Employee struct {
  BasicInfo BasicInfo `json:"base_info"`
  JobInfo   JobInfo   `json:"job_info"`
}
 
var jsonStr = `{
    "base_info": {
        "age": 30,
        "name": "Mike"
    },
    "job_info": {
        "skills": [
            "Java",
            "Go",
            "C"
        ]
    }
}
`
 
func TestEmbeddedJson(t *testing.T) {
  e := new(Employee)
  //josn 字符串到对象
  err := json.Unmarshal([]byte(jsonStr), e)
  if err != nil {
    t.Error(err)
  }
  fmt.Println(*e)
  //对象转字符串
  if v, err := json.Marshal(e); err == nil {
    fmt.Println(string(v))
  } else {
    t.Error(err)
  }
}
=== RUN   TestEmbeddedJson
{{Mike 30} {[Java Go C]}}
{"base_info":{"name":"Mike","age":30},"job_info":{"skills":["Java","Go","C"]}}
--- PASS: TestEmbeddedJson (0.00s)
PASS

二、使用第三方工具

 #安装
go get -u github.com/mailru/easyjson/...
#参考资料
https://github.com/mailru/easyjson
 

使用easyjson生成JSON处理代码

easyjson -all ./json_data.go
type BasicInfo struct {
  Name string `json:"name"`
  Age  int    `json:"age"`
}
type JobInfo struct {
  Skills []string `json:"skills"`
}
type Employee struct {
  BasicInfo BasicInfo `json:"basic_info"`
  JobInfo   JobInfo   `json:"job_info"`
}
import (
  "encoding/json"
  "fmt"
  "testing"
)
 
var jsonStr = `{
  "basic_info":{
      "name":"Mike",
    "age":30
  },
  "job_info":{
    "skills":["Java","Go","C"]
  }
} `
 
 
 
func TestEasyJson(t *testing.T) {
  e := Employee{}
  e.UnmarshalJSON([]byte(jsonStr))
  fmt.Println(e)
  if v, err := e.MarshalJSON(); err != nil {
    t.Error(err)
  } else {
    fmt.Println(string(v))
  }
}
=== RUN   TestEasyJson
{{Mike 30} {[Java Go C]}}
{"basic_info":{"name":"Mike","age":30},"job_info":{"skills":["Java","Go","C"]}}
--- PASS: TestEasyJson (0.00s)
PASS
相关文章
|
3月前
|
JSON 人工智能 编译器
Go json 能否解码到一个 interface 类型的值
Go json 能否解码到一个 interface 类型的值
30 1
|
3月前
|
JSON Go 数据格式
Go - json.Unmarshal 遇到的小坑
Go - json.Unmarshal 遇到的小坑
59 9
|
3月前
|
JSON Go 数据格式
Go实现json字符串与各类struct相互转换
文章通过Go语言示例代码详细演示了如何实现JSON字符串与各类struct之间的相互转换,包括结构体对象生成JSON字符串和JSON字符串映射到struct对象的过程。
31 0
|
4月前
|
JSON Java Serverless
函数计算产品使用问题之如何使用Go SDK从HTTP上下文中提取JSON数据
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
JSON 前端开发 JavaScript
Go怎么解析不定JSON数据?
在Go中处理不确定结构的JSON数据,可以使用`map[string]interface{}`来解析,它能适应各种JSON键值对,但需要类型检查。另一种方法是使用`json.RawMessage`保存原始JSON,之后按需解析。此外,`json.Number`用于处理任意精度的数字。当JSON字段类型未知时,可以先解码到`interface{}`并做类型断言。第三方库如gjson和jsonparser提供更灵活的解析选项。
|
6月前
|
JSON JavaScript 前端开发
Golang深入浅出之-Go语言JSON处理:编码与解码实战
【4月更文挑战第26天】本文探讨了Go语言中处理JSON的常见问题及解决策略。通过`json.Marshal`和`json.Unmarshal`进行编码和解码,同时指出结构体标签、时间处理、omitempty使用及数组/切片区别等易错点。建议正确使用结构体标签,自定义处理`time.Time`,明智选择omitempty,并理解数组与切片差异。文中提供基础示例及时间类型处理的实战代码,帮助读者掌握JSON操作。
172 1
Golang深入浅出之-Go语言JSON处理:编码与解码实战
|
6月前
|
JSON 编解码 Go
【Go语言专栏】Go语言中的JSON编码与解码
【4月更文挑战第30天】Go语言内置JSON编码解码支持,简化了数据交换。`json.Marshal`用于将Go结构体转换为JSON,如示例中`Person`结构体的编码。`json.Unmarshal`则将JSON数据反序列化到结构体,需传入结构体变量的地址。错误处理至关重要,特别是在处理大量数据时,要注意性能优化,如避免不必要的转换和重复操作。了解自定义编码解码和最佳实践能提升开发效率。掌握这些技能,有助于构建高效Go应用。
69 0
|
11月前
|
JSON Go 数据格式
go 变量与json相互转换
go 变量与json相互转换
66 1
|
JSON Linux 测试技术
go语言处理数据、基本通信以及环境配置 -- json,protobuf,grpc
go语言处理数据、基本通信以及环境配置 -- json,protobuf,grpc
|
存储 XML JSON
互联网协议必备:Go语言中JSON的序列化与反序列化
互联网协议必备:Go语言中JSON的序列化与反序列化
148 0