Ändern Sie den JSON-Schlüssel beim Marshalling und Unmarshaling dynamisch

WBOY
Freigeben: 2024-02-11 09:30:09
nach vorne
1204 Leute haben es durchsucht

marshal 和 unmarshal 时动态更改 json key

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!

Frageninhalt

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

ist

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

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

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?

Problemumgehung

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

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!

Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage