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

Barbara Streisand
Freigeben: 2024-11-22 07:03:11
Original
330 Leute haben es durchsucht

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

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

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
    [...]
}
Nach dem Login kopieren

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"
      }
    ],
Nach dem Login kopieren

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!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage