A json library using Boost.Spirit V2 and X3 for the parser.
The primary goal of the json spirit library was to create a conformant json parser that resulted in a json object that could be manipulated much like in javascript or python.
// the json::value is the primary data type
// you can simply assign it values
json::value v = 42;
v = "foo";
v = true;
v = 14.5;
// you can also treat the json::value like an array
v[0] = "foo";
v[1] = true;
// or a json object
v["foo"] = 42;
v["bar"] = false;
// and of course, these can be more complex
json::value z;
z[4] = v;
std::cout << z << "\n";
which would result in:
[null, null, null, null, {"bar":false, "foo":42}]
We have CMake and Boost.Build support.
For CMake, do this to build the library:
cd json_spirit
mkdir build
cd build
cmake ..
make
You may specify the version of Boost to build against by defining BOOST_ROOT on the CMake command line like this:
cmake -DBOOST_ROOT=/sandbox/boost/trunk ..
To run the unit tests:
make test
One way to use the json library in another CMake project is to treat it as an external project.
Here is an example of how to do that:
# Find json spirit
ExternalProject_Add(
dependency.json_spirit
URL ${CMAKE_CURRENT_SOURCE_DIR}/vendor/json_spirit
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/json_spirit
CMAKE_COMMAND ${CMAKE_COMMAND}
CMAKE_GENERATOR ${CMAKE_GENERATOR}
CMAKE_ARGS ${BOOST_CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> --target json
INSTALL_COMMAND "")
ExternalProject_Get_Property(dependency.json_spirit SOURCE_DIR BINARY_DIR)
set(INSTALL_DIR ${BINARY_DIR}/${CMAKE_CFG_INTDIR})
add_library(json_spirit STATIC IMPORTED)
set(libjson_name "${CMAKE_STATIC_LIBRARY_PREFIX}json${CMAKE_STATIC_LIBRARY_SUFFIX}")
set_property(
TARGET json_spirit
PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/${libjson_name})
set_property(
TARGET json_spirit
PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR})
add_dependencies(json_spirit dependency.json_spirit)
and for your specific target you can:
target_link_libraries(my_target
json_spirit
.... other libraries ... )
For Boost.Build, we assume either your user-config.jam file has a line like this:
use-project /boost : /sandbox/boost/trunk ;
or you have set the environment variable BOOST_ROOT to the location of the boost version you want to use.
You can build the library via:
cd json_spirit
bjam json
You can build the tests via:
cd json_spirit/libs/json/test
bjam
For bazel depending on this library using the bazel build system add the following to your WORKSPACE
file
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
git_repository(
name = "com_github_cierelabs_json_spirit",
remote = "https://github.com/cierelabs/json_spirit",
commit = "371c3b5d283f6272860d4d2eac996591ffad259c"
)
load("@com_github_cierelabs_json_spirit//:json_spirit_deps.bzl", "json_spirit_deps")
json_spirit_deps()
load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps")
boost_deps()
The library can now be depended on using the target @com_github_cierelabs_json_spirit:json_spirit
e.g.
cc_library(
name = "some_lib",
deps = ["@com_github_cierelabs_json_spirit:json_spirit"],
# ...
)
Coming soon. Unit tests located in libs/json/test/*.cpp
provide a good starting point for exploration of the functionality.
json_spirit
is licensed under the Boost Software License. See LICENSE_1_0.txt for details.