91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在golang中使用Unmarshal將json賦給struct時出錯如何解決

發布時間:2021-03-22 16:32:57 來源:億速云 閱讀:272 作者:Leah 欄目:開發技術

在golang中使用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}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜平县| 陆河县| 祁门县| 南陵县| 蒙阴县| 华坪县| 叶城县| 凤凰县| 周宁县| 鲜城| 吴川市| 尚志市| 丹凤县| 启东市| 大埔区| 梨树县| 宣恩县| 阿合奇县| 丹东市| 独山县| 石嘴山市| 大港区| 南汇区| 崇仁县| 绵阳市| 四川省| 德庆县| 孙吴县| 高邑县| 汕尾市| 沛县| 太保市| 建水县| 揭西县| 珲春市| 五河县| 井陉县| 海阳市| 大方县| 余江县| 大理市|