json5
is a small header only C++ library for parsing JSON or JSON5 data. It also comes with a simple reflection system for easy serialization and deserialization of C++ structs.
#include <json5/json5_input.hpp>
#include <json5/json5_output.hpp>
struct Settings
{
int x = 0;
int y = 0;
int width = 0;
int height = 0;
bool fullscreen = false;
std::string renderer = "";
JSON5_MEMBERS(x, y, width, height, fullscreen, renderer)
};
Settings s;
// Fill 's' instance from file
json5::from_file("settings.json", s);
// Save 's' to file
json5::to_file("settings.json", s);
TBD
Provides functions to load json5::document
from string, stream or file.
Provides functions to convert json5::document
into string, stream or file.
bool
int
,float
,double
std::string
std::vector
,std::map
,std::unordered_map
,std::array
C array
TBD
// Let's have a 3D vector struct:
struct vec3 { float x, y, z; };
// Let's have a triangle struct with 'vec3' members
struct Triangle
{
vec3 a, b, c;
};
JSON5_CLASS(Triangle, a, b, c)
namespace json5::detail {
// Write vec3 as JSON array of 3 numbers
inline json5::value write( writer &w, const vec3 &in )
{
w.push_array();
w += write( w, in.x );
w += write( w, in.y );
w += write( w, in.z );
return w.pop();
}
// Read vec3 from JSON array
inline error read( const json5::value &in, vec3 &out )
{
return read( json5::array_view( in ), out.x, out.y, out.z );
}
} // namespace json5::detail
enum class MyEnum
{
Zero,
First,
Second,
Third
};
// (must be placed in global namespce, requires C++20)
JSON5_ENUM( MyEnum, Zero, First, Second, Third )