Heim > Backend-Entwicklung > Golang > Wie gehe ich mit verschachtelten codierten Zeichenfolgen in JSON-Websocket-Daten um?

Wie gehe ich mit verschachtelten codierten Zeichenfolgen in JSON-Websocket-Daten um?

Patricia Arquette
Freigeben: 2024-12-05 01:54:08
Original
543 Leute haben es durchsucht

How to Handle Nested Encoded Strings in JSON Websocket Data?

JSON mit verschachtelten codierten Zeichenfolgen dekodieren

Problem:

Beim Parsen von Websocket-Daten im JSON-Format können Benutzer auf Fehler stoßen aufgrund verschachtelter codierter JSON-Zeichenfolgen, die die JSON-Syntax verletzen. Beispielsweise kann der Zeichenfolgenwert eines „Text“-Felds HTML-Entitäten wie „“ und „<“ enthalten, was dazu führt, dass der Decoder fehlschlägt.

Lösung:

Um verschachtelte codierte Zeichenfolgen in JSON verarbeiten zu können, muss die Anwendung die Daten in zwei Teile dekodieren Schritte:

  1. Erster Durchgang:Dekodieren Sie die äußere JSON-Ebene mithilfe einer Grundstruktur, die die verschachtelten codierten Zeichenfolgen ignoriert und sie als regulären Text behandelt.
  2. Zweiter Durchgang: Nachdem Sie die Daten der äußeren Schicht erhalten haben, dekodieren Sie die verschachtelten JSON-Zeichenfolgen innerhalb der „args“ Feld.

Hier ist ein Beispiel-Codeausschnitt, der diesen Ansatz demonstriert:

type main struct {
  Name string   `json:"name"`
  Args []string `json:"args"`
}

type arg struct {
  Method string `json:"method"`
  Params par    `json:"params"`
}
type par struct {
  Channel   string `json:"channel,omitempty"`
  Name      string `json:"name,omitempty"`
  NameColor string `json:"nameColor,omitempty"`
  Text      string `json:"text,omitempty"`
  Time      int64  `json:"time,omitempty"`
}

// Input JSON string
str := `{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"channel\",\"name\":\"name\",\"nameColor\":\"B5B11E\",\"text\":\"https://play.spotify.com/browse\",\"time\":1455397119}}"]}`

var m main
if err := json.Unmarshal([]byte(str), &m); err != nil {
    log.Fatal(err)
}
var args arg
if err := json.Unmarshal([]byte(m.Args[0]), &args); err != nil {
    log.Fatal(err)
}

In diesem Beispiel wird der erste Durchgang durch Dekodierung der äußeren JSON-Zeichenfolge in die Hauptstruktur durchgeführt, die enthält die Felder „name“ und „args“. Das Feld „args“ wird dann im zweiten Durchgang als separate JSON-Zeichenfolge analysiert, wobei die HTML-Entitäten entfernt und als gültiges arg-Objekt wiederhergestellt werden. Dieser Ansatz stellt sicher, dass alle JSON-Daten korrekt verarbeitet werden und Fehler vermieden werden.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit verschachtelten codierten Zeichenfolgen in JSON-Websocket-Daten um?. 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