Rumah >pembangunan bahagian belakang >Golang >Menggunakan struct untuk menghuraikan json bersarang dalam bahasa go
Tidak dapat menggunakan go lang untuk menghuraikan json bersarang ke dalam objek struktur
Saya mempunyai rentetan json bersarang dan saya mahu menghuraikannya menggunakan struct dalam bahasa go. json kelihatan seperti ini
{"action":"add","business":{"listid":123,"objecttags":[{"tagcode":"csharp","tagname":"codename","tagvalue":["2"],"tagtype":3},{"tagcode":"golang","tagname":"coding","tagvalue":["3"],"tagtype":3}]}}
Saya ingin menghuraikan json menggunakan bahasa go. json mempunyai struktur bersarang jadi saya mencipta struktur yang disebutkan dalam kod berikut
package main import ( "encoding/json" "fmt" ) type objecttagslist struct { tagcode string tagname string tagvalue []string } type model struct { action string `json:"action"` business struct { listid int64 `json:"listid"` objecttags []objecttagslist `json:"objecttags"` } `json:"business"` } func main() { json := `{"action":"add","business":{"listid":123,"objecttags":[{"tagcode":"csharp","tagname":"codename","tagvalue":["2"],"tagtype":3},{"tagcode":"golang","tagname":"coding","tagvalue":["3"],"tagtype":3}]}}` var model model json.unmarshal([]byte(json), &model) fmt.println(model.action) // this prints correctly as "add" fmt.println(model.business.listid) // this prints correctly as "123" fmt.println(model.business.objecttags) // this does not print the objecttags. rather this prints the objecttags as "[{ []} { []}]" }
Saya tidak boleh mendapatkan nilai json bersarang dalam ke dalam struktur.
Saya juga cuba membongkar struktur dalaman semula
var object []objecttagslist //this gives error as cannot convert model.business.objecttags (variable of type []objecttagslist) to type []byte json.unmarshal([]byte(model.business.objecttags), &object)
//Ralat, model.business.objecttags (pembolehubah jenis []objecttagslist) tidak boleh ditukar kepada jenis []bait
fmt.println(object)
Ini memberi saya ralat Tidak dapat menukar model.business.objecttags (pembolehubah jenis []objecttagslist) kepada menaip []bait.
Bagaimana untuk memetakan json ini ke dalam struktur? Saya ingin memetakannya sedemikian rupa sehingga saya boleh menggunakan objek seperti
model.Business.ObjectTags[0].tagCode //--> Should print/store "csharp" model.Business.ObjectTags[0].tagValue[0] //--> Should print/store "2"
Sila bantu
Anda hanya boleh marshal/unmarshal "exported" medan - iaitu medan yang boleh diakses di luar pakej semasa, yang dalam go bermaksud "medan bermula dengan huruf besar". Jadi jika anda mengubah suai kod anda supaya kelihatan seperti ini:
package main import ( "encoding/json" "fmt" ) type objecttagslist struct { tagcode string tagname string tagvalue []string } type model struct { action string `json:"action"` business struct { listid int64 `json:"listid"` objecttags []objecttagslist `json:"objecttags"` } `json:"business"` } func main() { json := ` { "action": "add", "business": { "listid": 123, "objecttags": [ { "tagcode": "csharp", "tagname": "codename", "tagvalue": [ "2" ], "tagtype": 3 }, { "tagcode": "golang", "tagname": "coding", "tagvalue": [ "3" ], "tagtype": 3 } ] } } ` var model model json.unmarshal([]byte(json), &model) fmt.println(model.action) fmt.println(model.business.listid) fmt.println(model.business.objecttags) }
Anda akan mendapat output:
add 123 [{csharp codename [2]} {golang coding [3]}]
Di sini kita mengambil kesempatan daripada fakta bahawa json
模块会自动将名为 tagcode
的键映射到名为 tagcode
ialah medan struktur, tetapi sebenarnya kita harus jelas:
type ObjectTagsList struct { TagCode string `json:"tagCode"` TagName string `json:"tagName"` TagValue []string `json:"tagValue"` }
Atas ialah kandungan terperinci Menggunakan struct untuk menghuraikan json bersarang dalam bahasa go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!