Featured image of post Przydatne biblioteki C++ #01 nlohmann:json

Przydatne biblioteki C++ #01 nlohmann:json

Spis treści

https://github.com/nlohmann/json

Bardzo przyjemna biblioteka do pracy z Json’em. Daje nam ona obsługę tegoż formatu na kilka sposobów, jednak chciałbym przedstawić jeden, z którego korzystam. Niestety sposób ten działa tylko dla naszych typów, które możemy edytować. W związku z tym mam wątpliwości co do zachowania zasady pojedynczej odpowiedzialności (z ang. Single Responsibility Principle). Jednak nie zapominaj, że ta biblioteka posiada również rozwiązania dla (de-)serializacji typów trzecich, których modyfikować nie możemy.

Dlaczego lubię tę bibliotekę?

  • Jest dostępna w postaci jednoplikowego nagłówka, przez co łatwo ją dołączyć do projektu.

  • Bardzo obszerna i porządnie wykonana dokumentacja, która ułatwia zapoznanie się z dostępnymi funkcjonalnościami i tym, jak używać ich u siebie.

Przykład zastosowania Nlohmann::json
struct MyDataType {
    std::string someStrValue;
    double someDoubleValue;
    int someIntValue;

    // Dodanie (de-) serializacji (1)
    NLOHMANN_DEFINE_TYPE_INTRUSIVE(MyDataType, someStrValue, someDoubleValue, someIntValue)
};

///
/// Funkcja reprezentująca jak zamienić JSON'a w nasz własny typ
///
MyDataType toMyDataType(const std::string& rawJson) {
    auto j = nlohmann::json::parse(rawJson); (2)
    auto myDataType = j.get<MyDataType>();
    return myDataType;
}

///
/// Funkcja reprezentująca jak zamienić nasz własny typ w JSON'a.
///
std::string toString(const MyDataType& data) {
    nlohman::json jsonData = data; // W tym miejscu dochodzi do automatycznej konwersji (3)
    return jsonData.dump();
}
1 Najpierw musimy dodać makro, które zawiera w sobie funkcje serializujące i deserializujące.
2 Potem możemy już dokonywać deserializacji JSON’a (w postaci ciągu znakowego) do obiektu,
3 i serializacji z obiektu na JSON’a.
comments powered by Disqus
Proszę pamiętaj, że blog jest na ten moment w wersji poglądowej i może zawierać wiele błędów (ale nie merytoycznych!). Mimo to mam nadzieję, że blog Ci się podoba! Wiele ilustracji pojawiło się na blogu dzięki unsplash.com!
Zbudowano z Hugo
Motyw Stack zaprojektowany przez Jimmy