大佬教程收集整理的这篇文章主要介绍了在 golang 中使用 Json,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
序列化对象将使用 ENcoding/json 中的 Marshal 函数。@H_607_3@
函数原型为:func Marshal(v interface{}) ([]byte,error)
@H_607_3@
以下是官网给出的例子:@H_607_3@
package main import ( "encoding/json" "fmt" "os" ) func main() { type ColorGroup struct { ID int Name String Colors []String } group := ColorGroup{ ID: 1,Name: "Reds",Colors: []String{"Crimson","Red","Ruby","Maroon"},} b,err := json.Marshal(group) if err != nil { fmt.Println("error:",err) } os.Stdout.Write(b) }
需要注意的是:json.Marshal返回了[]byte类型,通常情况下,需要将其转换为String类型使用。@H_607_3@
反序列化对象将使用 ENcoding/json 中的 Unmarshal 函数。@H_607_3@
函数原型为:func Unmarshal(data []byte,v interface{}) error
@H_607_3@
以下是官网给出的例子:@H_607_3@
package main import ( "encoding/json" "fmt" ) func main() { var jsonBlob = []byte(`[ {"Name": "Platypus","Order": "Monotremata"},{"Name": "Quoll","Order": "Dasyuromorphia"} ]`) type Animal struct { Name String Order String } var animals []Animal err := json.Unmarshal(jsonBlob,&animals) if err != nil { fmt.Println("error:",err) } fmt.Printf("%+v",animals) }
在反序列化时,有可能不知道Json数据的具体类型,那应该怎么办呢?@H_607_3@
其实,观察json.Unmarshal的函数原型可以看到,其第二个参数是一个interface。@H_607_3@
事实上,你可以传入一个interface对象的指针,反序列化函数依然会填充这个对象。并且这个对象可以被转换成为@H_977_5@map[String]interface{}这样的类型或者[]interface{}
这样的类型,这取决于Json的内容。@H_607_3@
于是,我们便有了在不知道Json数据具体类型的情况下,解析Json内容的方法。@H_607_3@
package main import ( "encoding/json" "fmt" ) func main() { var jsonBlob = []byte(`[ {"Name": "Platypus","Order": "Dasyuromorphia"} ]`) var jsonObject interface{} err := json.Unmarshal(jsonBlob,&jsonObject) if err != nil { fmt.Println("error:",err) } animals := jsonObject.([]interface{}) for i := 0; i < len(animals); i++ { animalObject := animals[i] animalMap := animalObject.(map[String]interface{}) fmt.Println(animalMap["Name"]) fmt.Println(animalMap["Order"]) } }
如上,我们可以将反序列化出的对象,递归地进行类型转换,转换为[]interface{}
或者@H_977_5@map[String]interface{},这样就能一层层地解析Json的内容了。@H_607_3@
当然,以上只是举例,证明可以通过一些手段解析未知结构的Json。为了正确解析未知结构的Json内容,你可能需要为解析过程添加一些判断,如解析出的对象的类型需要二选一,又如解析出的map类型中键的存在性等等。@H_607_3@
以上是大佬教程为你收集整理的在 golang 中使用 Json全部内容,希望文章能够帮你解决在 golang 中使用 Json所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。