Verwenden von struct zum Parsen von verschachteltem JSON in der Go-Sprache

WBOY
Freigeben: 2024-02-06 08:15:09
nach vorne
366 Leute haben es durchsucht

Verwenden von struct zum Parsen von verschachteltem JSON in der Go-Sprache

Frageninhalt

Go lang kann nicht zum Parsen von verschachteltem JSON in ein Strukturobjekt verwendet werden

Ich habe einen verschachtelten JSON-String und möchte ihn mithilfe von Strukturen in der Go-Sprache analysieren. json sieht so aus

{"action":"add","business":{"listid":123,"objecttags":[{"tagcode":"csharp","tagname":"codename","tagvalue":["2"],"tagtype":3},{"tagcode":"golang","tagname":"coding","tagvalue":["3"],"tagtype":3}]}}
Nach dem Login kopieren

Ich möchte JSON mit der Go-Sprache analysieren. json hat eine verschachtelte Struktur, daher habe ich die im folgenden Code erwähnte Struktur erstellt

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


}
Nach dem Login kopieren

Ich kann den Wert des inneren verschachtelten JSON nicht in die Struktur übernehmen.

Ich habe auch versucht, die innere Struktur noch einmal zu entpacken

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)
Nach dem Login kopieren

//Fehler, model.business.objecttags (Variable vom Typ []objecttagslist) kann nicht in den Typ []Byte

konvertiert werden
fmt.println(object)
Nach dem Login kopieren

Das gibt mir einen Fehler model.business.objecttags (Variable vom Typ []objecttagslist) kann nicht in den Typ []byte konvertiert werden.

Wie ordne ich diesen JSON einer Struktur zu? Ich möchte es so abbilden, dass ich Objekte wie

verwenden kann
model.Business.ObjectTags[0].tagCode //--> Should print/store "csharp"
model.Business.ObjectTags[0].tagValue[0] //--> Should print/store "2"
Nach dem Login kopieren

Bitte helfen Sie


Richtige Antwort


Sie können nur „exportierte“ Felder marshalieren/unmarshalieren – d. h. Felder, auf die außerhalb des aktuellen Pakets zugegriffen werden kann, was in go „Felder bedeutet, die mit einem Großbuchstaben beginnen“. Wenn Sie Ihren Code also so ändern würden, dass er wie folgt aussieht:

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)
}
Nach dem Login kopieren

Sie erhalten die Ausgabe:

add
123
[{csharp codename [2]} {golang coding [3]}]
Nach dem Login kopieren

Hier machen wir uns die Tatsache zunutze, dass json 模块会自动将名为 tagcode 的键映射到名为 tagcode ein Strukturfeld ist, aber eigentlich sollten wir uns im Klaren sein:

type ObjectTagsList struct {
    TagCode  string   `json:"tagCode"`
    TagName  string   `json:"tagName"`
    TagValue []string `json:"tagValue"`
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonVerwenden von struct zum Parsen von verschachteltem JSON in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!