Skip to content
Christopher Dunn edited this page Sep 10, 2017 · 18 revisions
branch Travis CI AppVeyor
master Build Status Build status
0.y.z Build Status Build status

Introduction

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It can represent integer, real number, string, an ordered sequence of value, and a collection of name/value pairs.

Here is an example of JSON data:

{
    "my-encoding" : "UTF-8",
    "my-plug-ins" : [
        "python",
        "c++",
        "ruby"
        ],
    "my-indent" : { "length": 3, "use_space": true }
}

And here it is with comments:

// Configuration options
{
    // Default encoding for text
    "my-encoding" : "UTF-8",
    
    // Plug-ins loaded at start-up
    "my-plug-ins" : [
        "python",
        "c++",
        "ruby"
        ],
        
    // Tab indent size
    "my-indent" : { "length" : 3, "use_space": true }
}

Features of jsoncpp

  • Read and write JSON document.
  • Attach C and C++ style comments to element during parsing.
  • Rewrite JSON document preserving original comments.

Code example

#include <json/json.h>

Json::Value root;   // starts as "null"; will contain the root value after parsing
std::cin >> root;

// Get the value of the member of root named 'my-encoding', return 'UTF-32' if there is no
// such member.
std::string my_encoding = root.get("my-encoding", "UTF-32" ).asString();

// Get the value of the member of root named 'my-plug-ins'; return a 'null' value if
// there is no such member.
const Json::Value my_plugins = root["my-plug-ins"];
for ( int index = 0; index < my_plugins.size(); ++index )  // Iterates over the sequence elements.
   yourlib::loadPlugIn( my_plugins[index].asString() );

yourlib::setIndentLength( root["my-indent"].get("length", 3).asInt() );
yourlib::setIndentUseSpace( root["my-indent"].get("use_space", true).asBool() );

// ...
// At application shutdown to make the new configuration document:
// Since Json::Value has implicit constructor for all value types, it is not
// necessary to explicitly construct the Json::Value object:
root["encoding"] = yourlib::getCurrentEncoding();
root["indent"]["length"] = yourlib::getCurrentIndentLength();
root["indent"]["use_space"] = yourlib::getCurrentIndentUseSpace();

// Make a new JSON document with the new configuration. Preserve original comments.
std::cout << root << "\n";

You can also read from a file, e.g.:

#include <fstream>

std::ifstream config_doc("config_doc.json", std::ifstream::binary);
config_doc >> root;

If you need some unusual features, use Builders:

Json::Value root;
Json::CharReaderBuilder rbuilder;
// Configure the Builder, then ...
std::string errs;
bool parsingSuccessful = Json::parseFromStream(rbuilder, config_doc, &root, &errs);
if (!parsingSuccessful)
{
    // report to the user the failure and their locations in the document.
    std::cout  << "Failed to parse configuration\n"
               << errs;
    return;
}

// ...

Json::StreamWriterBuilder wbuilder;
// Configure the Builder, then ...
std::string outputConfig = Json::writeString(wbuilder, root);

A note on "comments"

Comments used to be supported in JSON but where removed for portability (C-like comments are not supported in Python). Since comments are useful in configuration/input file, this feature is preserved in jsoncpp.

Build instructions

Current build instructions are located in the file README.md in the top-directory of the project.

For other build systems, see Building.

What's New?

See the release notes.

Older news can be found in News.

Related links

  • JSON Specification and alternate language implementations.
  • YAML A data format designed for human readability.
  • UTF-8 and Unicode FAQ.

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.

Clone this wiki locally
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy