view ext/json11/README.md @ 295:de5dc40f1830

Include headers needed to compile with GCC 15's -std=gnu23 default ``` In file included from ../piper-vamp-cpp/vamp-json/VampJson.h:55, from ../piper-vamp-cpp/vamp-server/convert.cpp:36: ../piper-vamp-cpp/vamp-support/PluginHandleMapper.h:69:13: error: ‘uint32_t’ does not name a type 69 | typedef uint32_t Handle; | ^~~~~~~~ ../piper-vamp-cpp/vamp-support/PluginHandleMapper.h:39:1: note: ‘uint32_t’ is defined in header ‘<cstdint>’; this is probably fixable by adding ‘#include <cstdint>’ 38 | #include "PluginOutputIdMapper.h" +++ |+#include <cstdint> 39 | ../piper-vamp-cpp/ext/json11/json11.cpp: In function ‘void json11::dump(const std::string&, std::string&)’: ../piper-vamp-cpp/ext/json11/json11.cpp:95:32: error: ‘uint8_t’ does not name a type 95 | } else if (static_cast<uint8_t>(ch) <= 0x1f) { | ^~~~~~~ ../piper-vamp-cpp/ext/json11/json11.cpp:25:1: note: ‘uint8_t’ is defined in header ‘<cstdint>’; this is probably fixable by adding ‘#include <cstdint>’ 24 | #include <cmath> +++ |+#include <cstdint> 25 | #include <cstdlib> ``` Signed-off-by: Michel Lind <salimma@fedoraproject.org>
author Michel Lind <salimma@fedoraproject.org>
date Fri, 24 Jan 2025 11:38:28 -0600
parents bf8e3e7dd7de
children
line wrap: on
line source
json11
------

json11 is a tiny JSON library for C++11, providing JSON parsing and serialization.

The core object provided by the library is json11::Json. A Json object represents any JSON
value: null, bool, number (int or double), string (std::string), array (std::vector), or
object (std::map).

Json objects act like values. They can be assigned, copied, moved, compared for equality or
order, and so on. There are also helper methods Json::dump, to serialize a Json to a string, and
Json::parse (static) to parse a std::string as a Json object.

It's easy to make a JSON object with C++11's new initializer syntax:

    Json my_json = Json::object {
        { "key1", "value1" },
        { "key2", false },
        { "key3", Json::array { 1, 2, 3 } },
    };
    std::string json_str = my_json.dump();

There are also implicit constructors that allow standard and user-defined types to be
automatically converted to JSON. For example:

    class Point {
    public:
        int x;
        int y;
        Point (int x, int y) : x(x), y(y) {}
        Json to_json() const { return Json::array { x, y }; }
    };

    std::vector<Point> points = { { 1, 2 }, { 10, 20 }, { 100, 200 } };
    std::string points_json = Json(points).dump();

JSON values can have their values queried and inspected:

    Json json = Json::array { Json::object { { "k", "v" } } };
    std::string str = json[0]["k"].string_value();

More documentation is still to come. For now, see json11.hpp.