Heim >Backend-Entwicklung >Golang >Wie entmarshallt man verschachteltes JSON mit unbekannten Schlüsseln und dynamischen Servernamen?

Wie entmarshallt man verschachteltes JSON mit unbekannten Schlüsseln und dynamischen Servernamen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-22 07:03:11380Durchsuche

How to Unmarshall Nested JSON with Unknown Keys and Dynamic Server Names?

Unmarshalling von verschachteltem JSON mit unbekannten Schlüsseln

Die Herausforderung besteht darin, eine JSON-Struktur mit einer unbekannten Anzahl äußerer Schlüssel und einer verwirrend strukturierten Verschachtelung zu analysieren Schlüssel. Betrachten Sie das folgende JSON-Format:

{
  "message": {
    "Server1.example.com": [],
    "Server2.example.com": []
  },
  "response_ms": 659,
  "success": true
}

Komplikationen bei der Strukturdefinition

Die Komplexität ergibt sich aus dem Fehlen eines eindeutigen Schlüssels außerhalb des Servernamens und der dynamischen Natur des äußere Schlüssel. Der erste Versuch mit einer tief verschachtelten Struktur:

type ServerDetails struct {
  Message struct {
    Hostname struct {
      Details struct {
        Application string `json:"application"`
      } `json:"-"`
    } `json:"-"`
  } `json:"message"`
}

schlägt aufgrund der unbekannten Servernamen und des einzelnen verschachtelten Schlüssels ohne Außenschlüssel fehl.

Dynamische Schlüssellösung

Um diese Herausforderungen zu meistern, kann man eine Map[string]ServerStruct innerhalb der Struktur der obersten Ebene verwenden. ServerStruct enthält Anwendungs-, Besitzer- und andere relevante Informationen, die für jeden Server spezifisch sind. JSON-Tags können strategisch hinzugefügt werden, um eine ordnungsgemäße Analyse sicherzustellen.

Überarbeitete Strukturdefinition

type YourStruct struct {
    Success bool
    ResponseMS int
    Servers map[string]*ServerStruct
}

type ServerStruct struct {
    Application string
    Owner string
    [...]
}

JSON-Tags und Unmarshalling

Zusätzliche JSON-Tags sind erforderlich:

{
  "message": {
    "Server1.example.com": [
      {
        "application": "Apache",
        "host": {
          "name": "/^Server-[13456]/"
        },
        "owner": "User1",
        "project": "Web",
        "subowner": "User2"
      }
    ],

Die Das Feld „Nachricht“ wird jetzt in eine Map[string][]ServerStruct entmarshallt. Jeder Schlüssel in der Zuordnung stellt einen Servernamen dar und der entsprechende Wert ist ein Array von ServerStruct. Das „Host“-Feld wird beim Unmarshalling mit dem „-“-Tag ignoriert.

Mit diesen Änderungen können die JSON-Daten erfolgreich in die überarbeitete Struktur geparst werden.

Das obige ist der detaillierte Inhalt vonWie entmarshallt man verschachteltes JSON mit unbekannten Schlüsseln und dynamischen Servernamen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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