Menggunakan struct untuk menghuraikan json bersarang dalam bahasa go

WBOY
Lepaskan: 2024-02-06 08:15:09
ke hadapan
366 orang telah melayarinya

Menggunakan struct untuk menghuraikan json bersarang dalam bahasa go

Kandungan soalan

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}]}}
Salin selepas log masuk

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 "[{  []} {  []}]"


}
Salin selepas log masuk

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)
Salin selepas log masuk

//Ralat, model.business.objecttags (pembolehubah jenis []objecttagslist) tidak boleh ditukar kepada jenis []bait

fmt.println(object)
Salin selepas log masuk

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"
Salin selepas log masuk

Sila bantu


Jawapan betul


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)
}
Salin selepas log masuk

Anda akan mendapat output:

add
123
[{csharp codename [2]} {golang coding [3]}]
Salin selepas log masuk

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"`
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!