Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden von struct zum Parsen von verschachteltem JSON in der Go-Sprache

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

WBOY
WBOYnach vorne
2024-02-06 08:15:09408Durchsuche

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

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


}

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)

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

konvertiert werden
fmt.println(object)

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"

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

Sie erhalten die Ausgabe:

add
123
[{csharp codename [2]} {golang coding [3]}]

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"`
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen