Heim > Artikel > Backend-Entwicklung > Ändern Sie den JSON-Schlüssel beim Marshalling und Unmarshaling dynamisch
Der PHP-Editor Xiaoxin stellt Ihnen eine Methode vor, mit der Sie JSON-Schlüsselwerte während der Marshal- und Unmarshal-Prozesse dynamisch ändern können. Bei der Verarbeitung von JSON-Daten müssen wir manchmal Schlüsselwerte ändern oder ersetzen. In diesem Artikel wird eine einfache, aber effektive Technik vorgestellt, die Entwicklern hilft, dieses Ziel in PHP zu erreichen. Durch die Verwendung einiger spezifischer Funktionen und Technologien können wir problemlos mit JSON-Daten arbeiten und die Notwendigkeit erfüllen, Schlüsselwerte dynamisch zu ändern. Als nächstes folgen Sie bitte dem Herausgeber, um diese praktische Technik zu erlernen!
Ich bin gezwungen, eine API zu verwenden, die zwei verschiedene Schlüssel oder Identifikatoren für dasselbe Objekt (Umsatzsteuer-Identifikationsnummer) hat. Hängt davon ab, ob der Aufruf GET oder POST/PATCH
istIm GET muss ich den JSON mithilfe dieser Struktur entmarshalieren/dekodieren:
type SilverfinCompany struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat"` // here }
In POST und PATCH kann ich die Daten mithilfe dieser Struktur in JSON marsallieren:
<code>type SilverfinCompany struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat_identifier"` // here } </code>
Die offensichtliche Lösung besteht darin, zwei „verschiedene“ Strukturen mit demselben Inhalt, aber leicht unterschiedlichen JSON-Schlüsseln und zwei Konvertierungsfunktionen zu haben. Oder Sie haben zwei verschiedene Felder in der Struktur: Vat und VatIndentifier.
Das Problem besteht darin, dass es dem bereits komplexen Code zusätzliche Komplexität verleiht.
Also ich möchte wissen:
Gibt es eine Möglichkeit (ähnlich wie bei Reflection), den JSON-Schlüssel des Mehrwertsteuerfelds in der Struktur je nach Situation zu ändern?
Sie können Typdefinitionen zur Laufzeit nicht ändern, einschließlich Struktur-Tags.
Solange die Feldtypen und die Reihenfolge (d. h. das Speicherlayout) gleich sind, ist überhaupt keine Konvertierungsfunktion erforderlich, sie können direkt konvertiert werden: https://go.dev/play/p/IhkVM- BMLiY
func main() { foo := SilverfinCompanyFoo{ ID: 1, Name: "Baz", Vat: "Qux", } bar := SilverfinCompanyBar(foo) fmt.Println(bar) } type SilverfinCompanyFoo struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat"` // here } type SilverfinCompanyBar struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat_identifier"` // here } // {1 Baz Qux}
Dies ist eine gängige Lösung für diese Art von Szenario.
Das obige ist der detaillierte Inhalt vonÄndern Sie den JSON-Schlüssel beim Marshalling und Unmarshaling dynamisch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!