Design Pattern für Deserialisierung einer Web API

OP #6498988
Lesenswert?

Ich arbeite gerade das erste mal mit einer REST-API und mir fällt keine 
schöne Architekturlösung ein.

Von einer Web API erhalte ich JSON Objekte.  Dazu gibt es im Quelltext 
Äquivalente Klassen, die diese Objekte repräsentieren.

Zum Beispiel:
1
{"NameOfOwner": "Danish", "AccountBalance", 0.00}
1
#include <string>
2

3
struct Account
4
{
5
    std::string NameOfOwner;
6
    double AccountBalance;
7
    static Account createFromJSON(const json& j);
8
}

Für jedes Objekt würde ich eine Deserialisierungsfunktion 
createFromJson() vorsehen.  Diese fischt die benötigten Member aus dem 
DOM und trägt sie im DOM ein.

Das erfordert aber für jeden Typen eine solche Funktion und führt zu 
zahlreichen  Deserialisierungsfunktionen.  Das ist unschön.

Geht das besser?
Gast #6499012
Lesenswert?

Danish B. schrieb:
> Geht das besser?

Eine von den gefühlt Millionen JSON-Parser-Libs verwenden?

    https://github.com/search?q=json+parser+language%3AC

JSON hat ja nur ein paar verschiedene Datentypen: Objekt, Array, String, 
Number, Boolean und Null. Das war's.

Wenn Du mit eine generischen Repräsentation nicht arbeiten 
willst/kannst/sollst, bleibt Dir nichts anderes übrig, für jede 
Struktur/Klasse eine Konverter-Funktion zu schreiben, die JSON-Generisch 
in ein konkretes Objekt wandelt.

Willst Du das nicht von Hand machen, nimm halt einen Generator:

    https://github.com/search?q=json+parser+generator

Oder eben auch Online:

    https://app.quicktype.io/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren