网络编程
位置:首页>> 网络编程>> Go语言>> Go语言利用Unmarshal解析json字符串的实现

Go语言利用Unmarshal解析json字符串的实现

作者:hp_cpp  发布时间:2024-05-09 09:54:25 

标签:Go,Unmarshal,解析,json

简单的解析例子:

首先还是从官方文档中的例子:

package main

import (
?? ?"fmt"
?? ?"encoding/json"
)

type Animal struct {
? ? Name ?string
? ? Order string
}

func main() {
?? ?var jsonBlob = []byte(`[
?? ??? ?{"Name": "Platypus", "Order": "Monotremata"},
?? ??? ?{"Name": "Quoll", ? ?"Order": "Dasyuromorphia"}
?? ?]`)

?? ?var animals []Animal
?? ?
?? ?err := json.Unmarshal(jsonBlob, &animals)
?? ?if err != nil {
?? ? ? ?fmt.Println("error:", err)
?? ?}
?? ?fmt.Printf("%+v", animals)
}

输出:

[{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]

简单进行修改,修改为:

package main

import (
?? ?"fmt"
?? ?"encoding/json"
)

type Animal struct {
? ? Name ?string
? ? Order string
}

func main() {
?? ?var jsonBlob = []byte(`{"Name": "Platypus", "Order": "Monotremata"}`)
?? ?var animals Animal
?? ?err := json.Unmarshal(jsonBlob, &animals)
?? ?if err != nil {
?? ? ? ?fmt.Println("error:", err)
?? ?}
?? ?fmt.Printf("%+v", animals)
}

输出:

{Name:Platypus Order:Monotremata}

还是之前的例子:

解析这样的一个json字符串:

{
? ? "first fruit":
? ? {
? ? ? ? "describe":"an apple",
? ? ? ? "icon":"appleIcon",
? ? ? ? "name":"apple"
? ? },
? ? "second fruit":
? ? {
? ? ? ? "describe":"an orange",
? ? ? ? "icon":"orangeIcon",
? ? ? ? "name":"orange"
? ? },
? ? "three fruit array":
? ? [
? ? ? ? "eat 0",
? ? ? ? "eat 1",
? ? ? ? "eat 2",
? ? ? ? "eat 3",
? ? ? ? "eat 4"
? ? ]
}

go代码:

package main

import (
?? ?"fmt"
?? ?"encoding/json"
)

type Fruit struct {
?? ?Describe string `json:"describe"`
?? ?Icon ? ? string `json:"icon"`
?? ?Name ? ? string `json:"name"`
}

type FruitGroup struct {
?? ?FirstFruit ?*Fruit `json:"first fruit"` ?//指针,指向引用对象;如果不用指针,只是值复制
?? ?SecondFruit *Fruit `json:"second fruit"` //指针,指向引用对象;如果不用指针,只是值复制
?? ?THreeFruitArray []string `json:"three fruit array"`
}

func main() {
?? ?var jsonBlob = []byte(`{
? ? "first fruit": {
? ? ? ? "describe": "an apple",
? ? ? ? "icon": "appleIcon",
? ? ? ? "name": "apple"
? ? },
? ? "second fruit": {
? ? ? ? "describe": "an orange",
? ? ? ? "icon": "appleIcon",
? ? ? ? "name": "orange"
? ? },
? ? "three fruit array": [
? ? ? ? "eat 0",
? ? ? ? "eat 1",
? ? ? ? "eat 2",
? ? ? ? "eat 3"
? ? ]}`)

?? ?var fruitGroup FruitGroup
?? ?
?? ?err := json.Unmarshal(jsonBlob, &fruitGroup)
?? ?if err != nil {
?? ? ? ?fmt.Println("error:", err)
?? ?}
?? ?fmt.Printf("%+v\n", fruitGroup)
?? ?fmt.Printf("%+v\n", fruitGroup.FirstFruit)
?? ?fmt.Printf("%+v\n", fruitGroup.SecondFruit)
}

运行结果:

{FirstFruit:0xc00006c5a0 SecondFruit:0xc00006c5d0 THreeFruitArray:[eat 0 eat 1 eat 2 eat 3]}
&{Describe:an apple Icon:appleIcon Name:apple}
&{Describe:an orange Icon:appleIcon Name:orange}

来源:https://blog.csdn.net/hp_cpp/article/details/101058472

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com