• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go 使用Unmarshal将json赋给struct出错的原因及解决

    例如:

    将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}

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • react组件中的constructor和super知识点整理
    • MapStruct到底是什么?
    • Go遍历struct,map,slice的实现
    • golang struct, map, json之间的相互转换
    • golang 生成对应的数据表struct定义操作
    • Java MapStruct解了对象映射的毒
    • C#调用C类型dll入参为struct的问题详解
    • Java Structs框架原理案例详解
    上一篇:golang中json小谈之字符串转浮点数的操作
    下一篇:Go语言strconv包实现字符串和数值类型的相互转换
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Go 使用Unmarshal将json赋给struct出错的原因及解决 使用,Unmarshal,将,json,赋给,