Heim  >  Artikel  >  Backend-Entwicklung  >  Ändern Sie den JSON-Schlüssel beim Marshalling und Unmarshaling dynamisch

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

WBOY
WBOYnach vorne
2024-02-11 09:30:091143Durchsuche

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
}

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?

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}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Dynamisches SQL-Set GolangNächster Artikel:Dynamisches SQL-Set Golang