Webservices in C++: JSON-Daten (de)serialisieren mit Bibliothek PropertyTree

Die meisten Webanwendungen tauschen mit ihrem Backend Daten im JSON-Format aus. In C++-Code gelingt das mit der Boost-Bibliothek PropertyTree. Ein Leitfaden.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht
Lesezeit: 10 Min.
Von
  • Oliver Lau
Inhaltsverzeichnis

Statt nur ein monströses "Hallo, Welt"-Programm zu sein, soll der mithilfe von Boost.Beast programmierte Webservice aus Teil 1 dieser kleinen Artikelserie etwas Sinnvolles tun: beliebig große Zahlen darauf prüfen, ob sie prim sind, und mit einer Aussage über die Primeigenschaft sowie gegebenenfalls den Primfaktoren antworten. Wie der Webservice die empfangenen Daten einliest und seine Ergebnisse für die Übertragung vorbereitet, zeigt dieser zweite Teil.

Zum Übertragen strukturierter, zusammengesetzter Daten ist das JSON-Format (JavaScript Object Notation) eine gute Wahl. Daten in diesem Format bestehen aus menschenlesbaren, UTF-8-kodierten Zeichenfolgen. Zwar gibt es zum Datenaustausch zwischen Client und Server effizientere Formate, zum Beispiel Protobuf (Protocol Buffers) von Google, aber noch baut die Mehrheit der Webanwendungen auf das gute, alte JSON.

Mehr zu Webentwicklung

Wenn man eh schon mit dem Boost-Framework unterwegs ist, bietet es sich an, darin nach JSON-Unterstützung zu suchen. Und man findet sie auch, nämlich in der Bibliothek Boost.PropertyTree. In einem boost::property_tree::ptree kann man beliebig tief verschachtelte Daten fast jeden Typs speichern, die auf jeder Ebene über Schlüssel referenziert werden können, genau so, wie man es von JSON kennt. Die Schlüssel müssen vom Typ std::string oder std::wstring sein, damit die zu ptree gehörenden Serialisierer und Deserialisierer funktionieren. Ein Serialisierer erzeugt aus dem ptree die Daten im gewünschten Format, zum Beispiel JSON; ein Deserialisierer (Parser) ist das Gegenstück dazu. Denkt man in Objekten, die naturgemäß dynamisch sind, also ihre Eigenschaften während der Programmlaufzeit ändern können, friert ein Serialisieren deren Zustand ein. Erst nach dem Auftauen (Deserialisieren) kann ein Programm sie wieder verwenden.