Introduction
JSON (JavaScript Object Notation) is a lightweight data-interchange format.
Here is an example of JSON data:
{
"encoding" : "UTF-8",
"plug-ins" : [
"python",
"c++",
"ruby"
],
"indent" : { "length" : 3, "use_space": true }
}
JsonCpp supports comments as meta-data:
{
"encoding" : "UTF-8",
"plug-ins" : [
"python",
"c++",
"ruby"
],
"indent" : { "length" : 3, "use_space": true }
}
Features
- read and write JSON document
- attach C++ style comments to element during parsing
- rewrite JSON document preserving original comments
Notes: Comments used to be supported in JSON but were removed for portability (C like comments are not supported in Python). Since comments are useful in configuration/input file, this feature was preserved.
Code example
std::cin >> root;
std::cin >> root["subtree"];
std::string encoding = root.
get(
"encoding",
"UTF-8" ).
asString();
for (
int index = 0; index < plugins.
size(); ++index )
loadPlugIn( plugins[index].asString() );
foo::setIndentLength( root["indent"].get("length", 3).asInt() );
foo::setIndentUseSpace( root["indent"].get("use_space", true).asBool() );
root["encoding"] = foo::getCurrentEncoding();
root["indent"]["length"] = foo::getCurrentIndentLength();
root["indent"]["use_space"] = foo::getCurrentIndentUseSpace();
std::cout << root;
std::cout << std::endl;
Value get(ArrayIndex index, const Value &defaultValue) const
If the array contains at least index+1 elements, returns the element value, otherwise returns default...
ArrayIndex size() const
Number of values in array or object.
String asString() const
Embedded zeroes are possible.
Advanced usage
Configure builders to create readers and writers. For configuration, we use our own Json::Value
(rather than standard setters/getters) so that we can add features without losing binary-compatibility.
wbuilder["indentation"] = "\t";
rbuilder["collectComments"] = false;
std::string errs;
Build a CharReader implementation.
Build a StreamWriter implementation.
String writeString(StreamWriter::Factory const &factory, Value const &root)
Write into stringstream, then return string, for convenience.
bool parseFromStream(CharReader::Factory const &, IStream &, Value *root, String *errs)
Consume entire stream and use its begin/end.
Yes, compile-time configuration-checking would be helpful, but Json::Value
lets you write and read the builder configuration, which is better! In other words, you can configure your JSON parser using JSON.
CharReaders and StreamWriters are not thread-safe, but they are re-usable.
std::unique_ptr<Json::CharReader>
const reader(rbuilder.
newCharReader());
reader->parse(start, stop, &value1, &errs);
reader->parse(start, stop, &value2, &errs);
CharReader * newCharReader() const override
Allocate a CharReader via operator new().
Json::Value settings_
Configuration of this builder.
Build instructions
The build instructions are located in the file README.md in the top-directory of the project.
The latest version of the source is available in the project's GitHub repository: jsoncpp
What's New?
The description of latest changes can be found in the NEWS wiki .
Related links
Old project links
License
See file LICENSE
in the top-directory of the project.
Basically JsonCpp is licensed under MIT license, or public domain if desired and recognized in your jurisdiction.
- Author
- Baptiste Lepilleur blep@.nosp@m.user.nosp@m.s.sou.nosp@m.rcef.nosp@m.orge..nosp@m.net (originator)
-
Christopher Dunn cdunn.nosp@m.2001.nosp@m.@gmai.nosp@m.l.co.nosp@m.m (primary maintainer)
- Version
- We make strong guarantees about binary-compatibility, consistent with the Apache versioning scheme.
- See also
- version.h