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;
Represents a JSON value.
Definition: value.h:193
Value get(ArrayIndex index, const Value &defaultValue) const
If the array contains at least index+1 elements, returns the element value, otherwise returns default...
Definition: json_value.cpp:1074
ArrayIndex size() const
Number of values in array or object.
Definition: json_value.cpp:859
String asString() const
Embedded zeroes are possible.
Definition: json_value.cpp:628
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.
Definition: reader.h:289
Build a StreamWriter implementation.
Definition: writer.h:89
String writeString(StreamWriter::Factory const &factory, Value const &root)
Write into stringstream, then return string, for convenience.
Definition: json_writer.cpp:1246
bool parseFromStream(CharReader::Factory const &, IStream &, Value *root, String *errs)
Consume entire stream and use its begin/end.
Definition: json_reader.cpp:1971
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().
Definition: json_reader.cpp:1883
Json::Value settings_
Configuration of this builder.
Definition: reader.h:332
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