golang的json操作[转]

简介:
package main
 
import (
     "encoding/json"
     "fmt"
     "os"
)
 
type ConfigStruct  struct  {
     Host              string   `json: "host" `
     Port               int       `json: "port" `
     AnalyticsFile     string   `json: "analytics_file" `
     StaticFileVersion  int       `json: "static_file_version" `
     StaticDir         string   `json: "static_dir" `
     TemplatesDir      string   `json: "templates_dir" `
     SerTcpSocketHost  string   `json: "serTcpSocketHost" `
     SerTcpSocketPort   int       `json: "serTcpSocketPort" `
     Fruits            []string `json: "fruits" `
}
 
type Other  struct  {
     SerTcpSocketHost string   `json: "serTcpSocketHost" `
     SerTcpSocketPort  int       `json: "serTcpSocketPort" `
     Fruits           []string `json: "fruits" `
}
 
func main() {
     jsonStr := `{ "host" "http://localhost:9090" , "port" : 9090, "analytics_file" "" , "static_file_version" : 1, "static_dir" "E:/Project/goTest/src/" , "templates_dir" "E:/Project/goTest/src/templates/" , "serTcpSocketHost" ":12340" , "serTcpSocketPort" : 12340, "fruits" : [ "apple" "peach" ]}`
 
     //json str 转map
     var dat map[string]interface{}
     if  err := json.Unmarshal([]byte(jsonStr), &dat); err == nil {
         fmt.Println( "==============json str 转map=======================" )
         fmt.Println(dat)
         fmt.Println(dat[ "host" ])
     }
 
     //json str 转struct
     var config ConfigStruct
     if  err := json.Unmarshal([]byte(jsonStr), &config); err == nil {
         fmt.Println( "================json str 转struct==" )
         fmt.Println(config)
         fmt.Println(config.Host)
     }
 
     //json str 转struct(部份字段)
     var part Other
     if  err := json.Unmarshal([]byte(jsonStr), &part); err == nil {
         fmt.Println( "================json str 转struct==" )
         fmt.Println(part)
         fmt.Println(part.SerTcpSocketPort)
     }
 
     //struct 到json str
     if  b, err := json.Marshal(config); err == nil {
         fmt.Println( "================struct 到json str==" )
         fmt.Println(string(b))
     }
 
     //map 到json str
     fmt.Println( "================map 到json str=====================" )
     enc := json.NewEncoder(os.Stdout)
     enc.Encode(dat)
 
     //array 到 json str
     arr := []string{ "hello" "apple" "python" "golang" "base" "peach" "pear" }
     lang, err := json.Marshal(arr)
     if  err == nil {
         fmt.Println( "================array 到 json str==" )
         fmt.Println(string(lang))
     }
 
     //json 到 []string
     var wo []string
     if  err := json.Unmarshal(lang, &wo); err == nil {
         fmt.Println( "================json 到 []string==" )
         fmt.Println(wo)
     }
}

 from:http://my.oschina.net/golang/blog/210012

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!










本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/4800244.html ,如需转载请自行联系原作者

相关文章
|
3月前
|
XML JSON 编解码
重新认识 Golang 中的 json 编解码
欢迎访问[莹的网络日志](https://lifukun.com),分享技术探索与思考。本文深入解析Go中json编解码特性,涵盖字段映射、omitempty行为、性能对比、自定义编解码及json/v2新特性,助你真正掌握json使用细节。
|
6月前
|
JSON 人工智能 Go
在Golang中序列化JSON字符串的教程
在Golang中,使用`json.Marshal()`可将数据结构序列化为JSON格式。若直接对JSON字符串进行序列化,会因转义字符导致错误。解决方案包括使用`[]byte`或`json.RawMessage()`来避免双引号被转义,从而正确实现JSON的序列化与反序列化。
343 7
|
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,两者都能有效解决类型保持和性能优化的问题。
450 7
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
388 4
|
JSON Go 数据格式
Golang语言结构体链式编程与JSON序列化
这篇文章是关于Go语言中结构体链式编程与JSON序列化的教程,详细介绍了JSON格式的基本概念、结构体的序列化与反序列化、结构体标签的使用以及如何实现链式编程。
279 4
|
JSON Go 数据格式
Go - json.Unmarshal 遇到的小坑
Go - json.Unmarshal 遇到的小坑
279 9
|
JSON 人工智能 编译器
Go json 能否解码到一个 interface 类型的值
Go json 能否解码到一个 interface 类型的值
141 1
|
JSON 前端开发 JavaScript
Go怎么解析不定JSON数据?
在Go中处理不确定结构的JSON数据,可以使用`map[string]interface{}`来解析,它能适应各种JSON键值对,但需要类型检查。另一种方法是使用`json.RawMessage`保存原始JSON,之后按需解析。此外,`json.Number`用于处理任意精度的数字。当JSON字段类型未知时,可以先解码到`interface{}`并做类型断言。第三方库如gjson和jsonparser提供更灵活的解析选项。
646 1
|
JSON Go 数据格式
Go实现json字符串与各类struct相互转换
文章通过Go语言示例代码详细演示了如何实现JSON字符串与各类struct之间的相互转换,包括结构体对象生成JSON字符串和JSON字符串映射到struct对象的过程。
327 0

推荐镜像

更多