欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go 使用Unmarshal將json賦給struct出錯的原因及解決

 更新時間:2021年03月22日 15:01:19   作者:y思無邪  
這篇文章主要介紹了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中變量名是不可導(dǎo)出的(首寫字母是小寫的),需要把首寫字母改成大寫

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"` //指針,指向引用對象;如果不用指針,只是值復(fù)制
 SecondFruit *Fruit `json:"second fruit"` //指針,指向引用對象;如果不用指針,只是值復(fù)制
 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)
}

運行結(jié)果:

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇)

    一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇)

    這篇文章主要介紹了一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇),Golang 可以認為是服務(wù)器開發(fā)語言發(fā)展的趨勢之一,特別是在流媒體服務(wù)器開發(fā)中,已經(jīng)占有一席之地,今天我們不聊特別深奧的機制和內(nèi)容,就來聊一聊 Golang 對于文件的基本操作
    2021-04-04
  • 關(guān)于golang test緩存問題

    關(guān)于golang test緩存問題

    這篇文章主要介紹了關(guān)于golang test緩存問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • go sync.Map基本原理深入解析

    go sync.Map基本原理深入解析

    這篇文章主要為大家介紹了go sync.Map基本原理深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • go grpc安裝使用教程

    go grpc安裝使用教程

    gRPC是由Google主導(dǎo)開發(fā)的RPC框架,使用HTTP/2協(xié)議并用ProtoBuf作為序列化工具。這篇文章主要介紹了go grpc安裝使用教程,需要的朋友可以參考下
    2018-02-02
  • 使用Go基于WebSocket構(gòu)建千萬級視頻直播彈幕系統(tǒng)的代碼詳解

    使用Go基于WebSocket構(gòu)建千萬級視頻直播彈幕系統(tǒng)的代碼詳解

    這篇文章主要介紹了使用Go基于WebSocket構(gòu)建千萬級視頻直播彈幕系統(tǒng),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • golang logrus日志框架實例詳解

    golang logrus日志框架實例詳解

    logrus是一個可插拔的、結(jié)構(gòu)化的日志框架,這篇文章主要介紹了golang logrus日志框架實例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Ruby序列化和持久化存儲(Marshal、Pstore)操作方法詳解

    Ruby序列化和持久化存儲(Marshal、Pstore)操作方法詳解

    這篇文章主要介紹了Ruby序列化和持久化存儲(Marshal、Pstore)操作方法詳解,包括Ruby Marshal序列化,Ruby Pstore存儲,需要的朋友可以參考下
    2022-04-04
  • Go調(diào)用C++動態(tài)庫實現(xiàn)車牌識別的示例代碼

    Go調(diào)用C++動態(tài)庫實現(xiàn)車牌識別的示例代碼

    本文主要介紹了如何利用C++中Opencv、TensorRT等庫編譯出動態(tài)庫供Go調(diào)用,再寫個簡單的api對上傳的車輛圖片進行車牌識別,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Golang語言學(xué)習(xí)拿捏Go反射示例教程

    Golang語言學(xué)習(xí)拿捏Go反射示例教程

    這篇文章主要為大家介紹了Golang語言中Go反射示例的教程,教你拿捏Go反射,再也不用被Go反射折磨,有需要的朋友可以共同學(xué)習(xí)參考下
    2021-11-11
  • 關(guān)于Go你不得不知道的一些實用小技巧

    關(guān)于Go你不得不知道的一些實用小技巧

    開發(fā)語言上Go成為高并發(fā)業(yè)務(wù)開發(fā)的主流語言,再加上云原生技術(shù)底座的驅(qū)動,Go語言風(fēng)光無限,下面這篇文章主要給大家介紹了關(guān)于Go你不得不知道的一些實用小技巧,需要的朋友可以參考下
    2022-11-11

最新評論