Forum: PC-Programmierung Design Pattern für Deserialisierung einer Web API


von Danish B. (danishbelal)


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?

von Experte (Gast)


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/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.