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;
 
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;
 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);
 
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