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
相关文章
|
8月前
|
JSON JavaScript 前端开发
Go语言JSON 序列化与反序列化 -《Go语言实战指南》
本文介绍了 Go 语言中使用 `encoding/json` 包实现 JSON 与数据结构之间的转换。内容涵盖序列化(`Marshal`)和反序列化(`Unmarshal`),包括基本示例、结构体字段标签的使用、控制字段行为的标签(如 `omitempty` 和 `-`)、处理 `map` 和切片、嵌套结构体序列化、反序列化未知结构(使用 `map[string]interface{}`)以及 JSON 数组的解析。最后通过表格总结了序列化与反序列化的方法及类型要求,帮助开发者快速掌握 JSON 数据处理技巧。
|
JSON JavaScript 前端开发
Go语言中json序列化的一个小坑,建议多留意一下
在Go语言开发中,JSON因其简洁和广泛的兼容性而常用于数据交换,但其在处理数字类型时存在精度问题。本文探讨了JSON序列化的一些局限性,并介绍了两种替代方案:Go特有的gob二进制协议,以及msgpack,两者都能有效解决类型保持和性能优化的问题。
415 7
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
369 4
|
JSON Go 数据格式
Go - json.Unmarshal 遇到的小坑
Go - json.Unmarshal 遇到的小坑
263 9
|
JSON 人工智能 编译器
Go json 能否解码到一个 interface 类型的值
Go json 能否解码到一个 interface 类型的值
134 1
|
JSON JavaScript 前端开发
Golang深入浅出之-Go语言JSON处理:编码与解码实战
【4月更文挑战第26天】本文探讨了Go语言中处理JSON的常见问题及解决策略。通过`json.Marshal`和`json.Unmarshal`进行编码和解码,同时指出结构体标签、时间处理、omitempty使用及数组/切片区别等易错点。建议正确使用结构体标签,自定义处理`time.Time`,明智选择omitempty,并理解数组与切片差异。文中提供基础示例及时间类型处理的实战代码,帮助读者掌握JSON操作。
423 1
Golang深入浅出之-Go语言JSON处理:编码与解码实战
|
JSON 前端开发 JavaScript
Go怎么解析不定JSON数据?
在Go中处理不确定结构的JSON数据,可以使用`map[string]interface{}`来解析,它能适应各种JSON键值对,但需要类型检查。另一种方法是使用`json.RawMessage`保存原始JSON,之后按需解析。此外,`json.Number`用于处理任意精度的数字。当JSON字段类型未知时,可以先解码到`interface{}`并做类型断言。第三方库如gjson和jsonparser提供更灵活的解析选项。
595 1
|
JSON Go 数据格式
Go实现json字符串与各类struct相互转换
文章通过Go语言示例代码详细演示了如何实现JSON字符串与各类struct之间的相互转换,包括结构体对象生成JSON字符串和JSON字符串映射到struct对象的过程。
307 0
|
JSON Java Serverless
函数计算产品使用问题之如何使用Go SDK从HTTP上下文中提取JSON数据
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
158 0
|
JSON 编解码 Go
【Go语言专栏】Go语言中的JSON编码与解码
【4月更文挑战第30天】Go语言内置JSON编码解码支持,简化了数据交换。`json.Marshal`用于将Go结构体转换为JSON,如示例中`Person`结构体的编码。`json.Unmarshal`则将JSON数据反序列化到结构体,需传入结构体变量的地址。错误处理至关重要,特别是在处理大量数据时,要注意性能优化,如避免不必要的转换和重复操作。了解自定义编码解码和最佳实践能提升开发效率。掌握这些技能,有助于构建高效Go应用。
220 0

热门文章

最新文章