例如: 将JSON: { "name": "Laura" "age": "18" } 赋给struct: type PersonalInfo struct { Nam
例如:
将JSON:
{
"name": "Laura"
"age": "18"
}
赋给struct:
type PersonalInfo struct {
Name string `json:"name"`
Age string `json:"age"`
}
用语句:
person := PersonalInfo{}
err := json.Unmarshal(json, &persona)//json为上面的[]byte
出错原因:
1、struct中变量名是不可导出的(首写字母是小写的),需要把首写字母改成大写
2、需要传输person的指针
3、struct中json的名字与json中的名字需要一模一样
补充:Go语言处理JSON之——利用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}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。
--结束END--
本文标题: Go 使用Unmarshal将json赋给struct出错的原因及解决
本文链接: https://lsjlt.com/news/30658.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0