JsonCpp project page | Classes | Namespace | JsonCpp home page

Classes | Typedefs | Enumerations | Functions | Variables
Json Namespace Reference

JSON (JavaScript Object Notation). More...

## Classes
class | CharReader
| Interface for reading JSON from a char array. More...
class | CharReaderBuilder
| Build a CharReader implementation. More...
class | Exception
| Base class for all exceptions we throw. More...
class | Features
| Configuration passed to reader and writer. More...
class | LogicError
| Exceptions thrown by JSON_ASSERT/JSON_FAIL macros. More...
class | Path
| Experimental and untested: represents a "path" to access a node. More...
class | PathArgument
| Experimental and untested: represents an element of the "path" to access a node. More...
class | Reader
| Unserialize a JSON document into a Value. More...
class | RuntimeError
| Exceptions which the user cannot easily avoid. More...
class | SecureAllocator
class | StaticString
| Lightweight wrapper to tag static string. More...
class | StreamWriter
| Usage: More...
class | StreamWriterBuilder
| Build a StreamWriter implementation. More...
class | Value
| Represents a JSON value. More...
class | ValueConstIterator
| const iterator for object and array value. More...
class | ValueIterator
| Iterator for object and array value. More...
class | ValueIteratorBase
| base class for Value iterators. More...

## Typedefs
typedef int | Int
typedef unsigned int | UInt
typedef __int64 | Int64
typedef unsigned __int64 | UInt64
typedef Int64 | LargestInt
typedef UInt64 | LargestUInt
template<typename T >
using | Allocator = typename std::conditional< JSONCPP_USING_SECURE_MEMORY, SecureAllocator< T >, std::allocator< T > >::type
using | String = std::basic_string< char, std::char_traits< char >, Allocator< char > >
using | IStringStream = std::basic_istringstream< String::value_type, String::traits_type, String::allocator_type >
using | OStringStream = std::basic_ostringstream< String::value_type, String::traits_type, String::allocator_type >
using | IStream = std::istream
using | OStream = std::ostream
typedef unsigned int | ArrayIndex
typedef std::auto_ptr< CharReader > | CharReaderPtr
typedef char | UIntToStringBuffer[uintToStringBufferSize]
typedef std::auto_ptr< StreamWriter > | StreamWriterPtr

## Enumerations
enum | ValueType { nullValue = 0, intValue, uintValue, realValue, stringValue, booleanValue, arrayValue, objectValue }
| Type of the value held by a Value object. More...
enum | CommentPlacement { commentBefore = 0, commentAfterOnSameLine, commentAfter, numberOfCommentPlacement }
enum | PrecisionType { significantDigits = 0, decimalPlaces }
| Type of precision for formatting of real values. More...
enum | { uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1 }

## Functions
template<typename T , typename U >
bool | operator== (const SecureAllocator< T > &, const SecureAllocator< U > &)
template<typename T , typename U >
bool | operator!= (const SecureAllocator< T > &, const SecureAllocator< U > &)
bool | parseFromStream (CharReader::Factory const &, IStream &, Value *root, String *errs)
| Consume entire stream and use its begin/end. More...
IStream & | operator>> (IStream &, Value &)
| Read from 'sin' into 'root'. More...
void | throwRuntimeError (String const &msg)
| used internally More...
void | throwLogicError (String const &msg)
| used internally More...
void | swap (Value &a, Value &b)
String | writeString (StreamWriter::Factory const &factory, Value const &root)
| Write into stringstream, then return string, for convenience. More...
class | __declspec (deprecated("Use StreamWriter instead")) Writer
| Abstract class for writers. More...
class __declspec(deprecated("Use StreamWriterBuilder instead")) FastWriter class __declspec(deprecated("Use StreamWriterBuilder instead")) StyledWriter class | __declspec (deprecated("Use StreamWriterBuilder instead")) StyledStreamWriter
| Outputs a Value in JSON format without formatting (not human friendly). More...
String | valueToString (Int value)
String | valueToString (UInt value)
String | valueToString (LargestInt value)
String | valueToString (LargestUInt value)
String | valueToString (double value, unsigned int precision=Value::defaultRealPrecision, PrecisionType precisionType=PrecisionType::significantDigits)
String | valueToString (bool value)
String | valueToQuotedString (const char *value)
OStream & | operator<< (OStream &, const Value &root)
| Output using the StyledStreamWriter. More...
static void | getValidReaderKeys (std::set< String > *valid_keys)
static char | getDecimalPoint ()
static String | codePointToUTF8 (unsigned int cp)
| Converts a unicode code-point to UTF-8. More...
static void | uintToString (LargestUInt value, char *&current)
| Converts an unsigned integer to string. More...
template<typename Iter >
Iter | fixNumericLocale (Iter begin, Iter end)
| Change ',' to '. More...
template<typename Iter >
void | fixNumericLocaleInput (Iter begin, Iter end)
template<typename Iter >
Iter | fixZerosInTheEnd (Iter begin, Iter end)
| Return iterator that would be the new end of the range [begin,end), if we were to delete zeros in the end of string, but not the last zero before '. More...
template<typename T >
static std::unique_ptr< T > | cloneUnique (const std::unique_ptr< T > &p)
template<typename T , typename U >
static bool | InRange (double d, T min, U max)
static char * | duplicateStringValue (const char *value, size_t length)
| Duplicates the specified string value. More...
static char * | duplicateAndPrefixStringValue (const char *value, unsigned int length)
static void | decodePrefixedString (bool isPrefixed, char const *prefixed, unsigned *length, char const **value)
static void | releasePrefixedStringValue (char *value)
| Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue(). More...
static void | releaseStringValue (char *value, unsigned)
static bool | IsIntegral (double d)
static bool | isAnyCharRequiredQuoting (char const *s, size_t n)
static unsigned int | utf8ToCodepoint (const char *&s, const char *e)
static String | toHex16Bit (unsigned int x)
static String | valueToQuotedStringN (const char *value, unsigned length)
static void | getValidWriterKeys (std::set< String > *valid_keys)

## Variables
static const double | maxUInt64AsDouble = 18446744073709551615.0
static const char | hex2 []

## Detailed Description

JSON (JavaScript Object Notation).

## Typedef Documentation

## ◆ Allocator

template<typename T >

using Json::Allocator = typedef typename std::conditional<JSONCPP_USING_SECURE_MEMORY, SecureAllocator<T>, std::allocator<T> >::type

Definition at line 161 of file config.h.

## ◆ ArrayIndex

typedef unsigned int Json::ArrayIndex

Definition at line 29 of file forwards.h.

## ◆ CharReaderPtr

typedef std::auto_ptr<CharReader> Json::CharReaderPtr

Definition at line 56 of file json_reader.cpp.

## ◆ Int

typedef int Json::Int

Definition at line 138 of file config.h.

## ◆ Int64

typedef __int64 Json::Int64

Definition at line 147 of file config.h.

## ◆ IStream

using Json::IStream = typedef std::istream

Definition at line 169 of file config.h.

## ◆ IStringStream

using Json::IStringStream = typedef std::basic_istringstream<String::value_type, String::traits_type, String::allocator_type>

Definition at line 165 of file config.h.

## ◆ LargestInt

typedef Int64 Json::LargestInt

Definition at line 153 of file config.h.

## ◆ LargestUInt

typedef UInt64 Json::LargestUInt

Definition at line 154 of file config.h.

## ◆ OStream

using Json::OStream = typedef std::ostream

Definition at line 170 of file config.h.

## ◆ OStringStream

using Json::OStringStream = typedef std::basic_ostringstream<String::value_type, String::traits_type, String::allocator_type>

Definition at line 168 of file config.h.

## ◆ StreamWriterPtr

typedef std::auto_ptr<StreamWriter> Json::StreamWriterPtr

Definition at line 89 of file json_writer.cpp.

## ◆ String

using Json::String = typedef std::basic_string<char, std::char_traits<char>, Allocator<char> >

Definition at line 162 of file config.h.

## ◆ UInt

typedef unsigned int Json::UInt

Definition at line 139 of file config.h.

## ◆ UInt64

typedef unsigned __int64 Json::UInt64

Definition at line 148 of file config.h.

## ◆ UIntToStringBuffer

typedef char Json::UIntToStringBuffer[uintToStringBufferSize]

Definition at line 74 of file json_tool.h.

## Enumeration Type Documentation

## ◆ anonymous enum

anonymous enum

Enumerator
uintToStringBufferSize | Constant that specify the size of the buffer that must be passed to uintToString.

Definition at line 67 of file json_tool.h.

## ◆ CommentPlacement

enum Json::CommentPlacement

Enumerator
commentBefore | a comment placed on the line before a value
commentAfterOnSameLine | a comment just after a value on the same line
commentAfter | a comment on the line after a value (only make sense for
numberOfCommentPlacement | root value)

Definition at line 96 of file value.h.

## ◆ PrecisionType

enum Json::PrecisionType

Type of precision for formatting of real values.

Enumerator
significantDigits | we set max number of significant digits in string
decimalPlaces | we set max number of digits after "." in string

Definition at line 106 of file value.h.

## ◆ ValueType

enum Json::ValueType

Type of the value held by a Value object.

Enumerator
nullValue | 'null' value
intValue | signed integer value
uintValue | unsigned integer value
realValue | double value
stringValue | UTF-8 string value.
booleanValue | bool value
arrayValue | array value (ordered list)
objectValue | object value (collection of name/value pairs).

Definition at line 85 of file value.h.

## Function Documentation

## ◆ __declspec() [1/2]

class Json::__declspec | ( | deprecated("Use StreamWriter instead") |  | ) |

Abstract class for writers.

Deprecated:
  Use StreamWriter. (And really, this is an implementation detail.)

Definition at line 148 of file writer.h.

## ◆ __declspec() [2/2]

class __declspec (deprecated( "Use StreamWriterBuilder instead" )) FastWriter class __declspec (deprecated( "Use StreamWriterBuilder instead" )) StyledWriter class Json::__declspec | ( | deprecated("Use StreamWriterBuilder instead") |  | ) |

Outputs a Value in JSON format without formatting (not human friendly).

The JSON document is written in a single line. It is not intended for 'human' consumption, but may be useful to support feature such as RPC where bandwidth is limited.

See also
  Reader, Value

Deprecated:
  Use StreamWriterBuilder.

Writes a Value in JSON format in a human friendly way.

The rules for line break and indent are as follow:

- Object value:
  - if empty then print {} without indent and line break
  - if not empty the print '{', line break & indent, print one value per line and then unindent and line break and print '}'.
- Array value:
  - if empty then print [] without indent and line break
  - if the array contains no object value, empty array or some other value types, and all the values fit on one lines, then print the array on a single line.
  - otherwise, it the values do not fit on one line, or the array contains object or non empty array, then print one value per line.

If the Value have comments then they are outputed according to their CommentPlacement.

See also
  Reader, Value, Value::setComment()

Deprecated:
  Use StreamWriterBuilder.

Writes a Value in JSON format in a human friendly way, to a stream rather than to a string.

The rules for line break and indent are as follow:

- Object value:
  - if empty then print {} without indent and line break
  - if not empty the print '{', line break & indent, print one value per line and then unindent and line break and print '}'.
- Array value:
  - if empty then print [] without indent and line break
  - if the array contains no object value, empty array or some other value types, and all the values fit on one lines, then print the array on a single line.
  - otherwise, it the values do not fit on one line, or the array contains object or non empty array, then print one value per line.

If the Value have comments then they are outputed according to their CommentPlacement.

See also
  Reader, Value, Value::setComment()

Deprecated:
  Use StreamWriterBuilder.

Parameters

  indentation | Each level will be indented by this amount extra.

Serialize a Value in JSON format.

Parameters

  out | Stream to write to. (Can be ostringstream, e.g.)
  root | Value to serialize.

Note
  There is no point in deriving from Writer, since write() should not return a value.

Definition at line 297 of file writer.h.

## ◆ cloneUnique()

template<typename T >

static std::unique_ptr<T> Json::cloneUnique | ( | const std::unique_ptr< T > & | p | ) |
| static

Definition at line 58 of file json_value.cpp.

## ◆ codePointToUTF8()

static String Json::codePointToUTF8 | ( | unsigned int | cp | ) |
| inline static

Converts a unicode code-point to UTF-8.

Definition at line 39 of file json_tool.h.

## ◆ decodePrefixedString()

static void Json::decodePrefixedString | ( | bool | isPrefixed,
|  | char const * | prefixed,
|  | unsigned * | length,
|  | char const ** | value
| ) |  |
| inline static

Definition at line 178 of file json_value.cpp.

Referenced by Json::Value::asCString(), Json::Value::asString(), Json::Value::getString(), Json::Value::operator<(), and Json::Value::operator==().

Here is the caller graph for this function:

## ◆ duplicateAndPrefixStringValue()

static char* Json::duplicateAndPrefixStringValue | ( | const char * | value,
|  | unsigned int | length
| ) |  |
| inline static

Definition at line 158 of file json_value.cpp.

References JSON_ASSERT_MESSAGE, Json::Value::maxInt, and throwRuntimeError().

Referenced by Json::Value::Value().

Here is the caller graph for this function:

## ◆ duplicateStringValue()

static char* Json::duplicateStringValue | ( | const char * | value,
|  | size_t | length
| ) |  |
| inline static

Duplicates the specified string value.

Parameters

  value | Pointer to the string to duplicate. Must be zero-terminated if length is "unknown".
  length | Length of the value. if equals to unknown, then it will be computed using strlen(value).

Returns
  Pointer on the duplicate instance of string.

Definition at line 140 of file json_value.cpp.

References Json::Value::maxInt, and throwRuntimeError().

## ◆ fixNumericLocale()

template<typename Iter >

Iter Json::fixNumericLocale | ( | Iter | begin,
|  | Iter | end
| ) |  |

Change ',' to '.

' everywhere in buffer.

We had a sophisticated way, but it did not work in WinCE.

See also
  https://github.com/open-source-parsers/jsoncpp/pull/9

Definition at line 94 of file json_tool.h.

## ◆ fixNumericLocaleInput()

template<typename Iter >

void Json::fixNumericLocaleInput | ( | Iter | begin,
|  | Iter | end
| ) |  |

Definition at line 103 of file json_tool.h.

References getDecimalPoint().

## ◆ fixZerosInTheEnd()

template<typename Iter >

Iter Json::fixZerosInTheEnd | ( | Iter | begin,
|  | Iter | end
| ) |  |

Return iterator that would be the new end of the range [begin,end), if we were to delete zeros in the end of string, but not the last zero before '.

'.

Definition at line 119 of file json_tool.h.

## ◆ getDecimalPoint()

static char Json::getDecimalPoint | ( |  | ) |
| inline static

Definition at line 29 of file json_tool.h.

Referenced by fixNumericLocaleInput().

Here is the caller graph for this function:

## ◆ getValidReaderKeys()

static void Json::getValidReaderKeys | ( | std::set< String > * | valid_keys | ) |
| static

Definition at line 1927 of file json_reader.cpp.

Referenced by Json::CharReaderBuilder::validate().

Here is the caller graph for this function:

## ◆ getValidWriterKeys()

static void Json::getValidWriterKeys | ( | std::set< String > * | valid_keys | ) |
| static

Definition at line 1196 of file json_writer.cpp.

Referenced by Json::StreamWriterBuilder::validate().

Here is the caller graph for this function:

## ◆ InRange()

template<typename T , typename U >

static bool Json::InRange | ( | double | d,
|  | T | min,
|  | U | max
| ) |  |
| inline static

Definition at line 111 of file json_value.cpp.

Referenced by Json::Value::asInt(), Json::Value::asInt64(), Json::Value::asUInt(), Json::Value::asUInt64(), and Json::Value::isConvertibleTo().

Here is the caller graph for this function:

## ◆ isAnyCharRequiredQuoting()

static bool Json::isAnyCharRequiredQuoting | ( | char const * | s,
|  | size_t | n
| ) |  |
| static

Definition at line 179 of file json_writer.cpp.

Referenced by valueToQuotedStringN().

Here is the caller graph for this function:

## ◆ IsIntegral()

static bool Json::IsIntegral | ( | double | d | ) |
| static

Definition at line 1318 of file json_value.cpp.

Referenced by Json::Value::isInt(), Json::Value::isInt64(), Json::Value::isIntegral(), Json::Value::isUInt(), and Json::Value::isUInt64().

Here is the caller graph for this function:

## ◆ operator!=()

template<typename T , typename U >

bool Json::operator!= | ( | const SecureAllocator< T > & | ,
|  | const SecureAllocator< U > & |
| ) |  |

Definition at line 81 of file allocator.h.

## ◆ operator<<()

OStream & Json::operator<< | ( | OStream & | sout,
|  | const Value & | root
| ) |  |

Output using the StyledStreamWriter.

See also
  Json::operator>>()

Definition at line 1246 of file json_writer.cpp.

References Json::StreamWriterBuilder::newStreamWriter().

## ◆ operator==()

template<typename T , typename U >

bool Json::operator== | ( | const SecureAllocator< T > & | ,
|  | const SecureAllocator< U > & |
| ) |  |

Definition at line 76 of file allocator.h.

## ◆ operator>>()

IStream & Json::operator>> | ( | IStream & | sin,
|  | Value & | root
| ) |  |

Read from 'sin' into 'root'.

Always keep comments from the input JSON.

This can be used to read a file into a particular sub-object. For example:

Json::Value root;
cin >> root["dir"]["file"];
cout << root;

Result:

    {
    "dir": {
        "file": {
        // The input stream JSON would be nested here.
        }
    }
    }

Exceptions

  std::exception | on parse error.

See also
  Json::operator<<()

Definition at line 2007 of file json_reader.cpp.

References parseFromStream(), and throwRuntimeError().

## ◆ parseFromStream()

bool Json::parseFromStream | ( | CharReader::Factory const & | fact,
|  | IStream & | sin,
|  | Value * | root,
|  | String * | errs
| ) |  |

Consume entire stream and use its begin/end.

Someday we might have a real StreamReader, but for now this is convenient.

Definition at line 1993 of file json_reader.cpp.

References Json::CharReader::Factory::newCharReader().

Referenced by operator>>().

Here is the caller graph for this function:

## ◆ releasePrefixedStringValue()

static void Json::releasePrefixedStringValue | ( | char * | value | ) |
| inline static

Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue().

Definition at line 209 of file json_value.cpp.

## ◆ releaseStringValue()

static void Json::releaseStringValue | ( | char * | value,
|  | unsigned |
| ) |  |
| inline static

Definition at line 210 of file json_value.cpp.

## ◆ swap()

void Json::swap | ( | Value & | a,
|  | Value & | b
| ) |  |
| inline

Definition at line 897 of file value.h.

References Json::Value::swap().

Referenced by Json::Value::swap(), Json::Value::swapPayload(), and Json::Value::Value().

Here is the caller graph for this function:

## ◆ throwLogicError()

void Json::throwLogicError | ( | String const & | msg | ) |

used internally

Definition at line 238 of file json_value.cpp.

## ◆ throwRuntimeError()

void Json::throwRuntimeError | ( | String const & | msg | ) |

used internally

Definition at line 235 of file json_value.cpp.

Referenced by duplicateAndPrefixStringValue(), duplicateStringValue(), Json::StreamWriterBuilder::newStreamWriter(), operator>>(), and Json::ValueIterator::ValueIterator().

Here is the caller graph for this function:

## ◆ toHex16Bit()

static String Json::toHex16Bit | ( | unsigned int | x | ) |
| static

Definition at line 259 of file json_writer.cpp.

References hex2.

Referenced by valueToQuotedStringN().

Here is the caller graph for this function:

## ◆ uintToString()

static void Json::uintToString | ( | LargestUInt | value,
|  | char *& | current
| ) |  |
| inline static

Converts an unsigned integer to string.

Parameters

  value | Unsigned integer to convert to string
  current | Input/Output string buffer. Must have at least uintToStringBufferSize chars free.

Definition at line 81 of file json_tool.h.

Referenced by valueToString().

Here is the caller graph for this function:

## ◆ utf8ToCodepoint()

static unsigned int Json::utf8ToCodepoint | ( | const char *& | s,
|  | const char * | e
| ) |  |
| static

Definition at line 191 of file json_writer.cpp.

Referenced by valueToQuotedStringN().

Here is the caller graph for this function:

## ◆ valueToQuotedString()

String Json::valueToQuotedString | ( | const char * | value | ) |

Definition at line 339 of file json_writer.cpp.

References valueToQuotedStringN().

## ◆ valueToQuotedStringN()

static String Json::valueToQuotedStringN | ( | const char * | value,
|  | unsigned | length
| ) |  |
| static

Definition at line 270 of file json_writer.cpp.

References isAnyCharRequiredQuoting(), toHex16Bit(), and utf8ToCodepoint().

Referenced by valueToQuotedString().

Here is the caller graph for this function:

## ◆ valueToString() [1/6]

String Json::valueToString | ( | bool | value | ) |

Definition at line 177 of file json_writer.cpp.

## ◆ valueToString() [2/6]

String Json::valueToString | ( | double | value,
|  | unsigned int | precision = `Value::defaultRealPrecision`,
|  | PrecisionType | precisionType = `PrecisionType::significantDigits`
| ) |  |

Definition at line 171 of file json_writer.cpp.

References valueToString().

## ◆ valueToString() [3/6]

String Json::valueToString | ( | Int | value | ) |

Definition at line 118 of file json_writer.cpp.

Referenced by Json::Value::asString(), and valueToString().

Here is the caller graph for this function:

## ◆ valueToString() [4/6]

String Json::valueToString | ( | LargestInt | value | ) |

Definition at line 92 of file json_writer.cpp.

References Json::Value::maxLargestInt, Json::Value::minLargestInt, and uintToString().

## ◆ valueToString() [5/6]

String Json::valueToString | ( | LargestUInt | value | ) |

Definition at line 108 of file json_writer.cpp.

References uintToString().

## ◆ valueToString() [6/6]

String Json::valueToString | ( | UInt | value | ) |

Definition at line 120 of file json_writer.cpp.

References valueToString().

## ◆ writeString()

String Json::writeString | ( | StreamWriter::Factory const & | factory,
|  | Value const & | root
| ) |  |

Write into stringstream, then return string, for convenience.

A StreamWriter will be created from the factory, used, and then deleted.

Definition at line 1239 of file json_writer.cpp.

References Json::StreamWriter::Factory::newStreamWriter().

Referenced by Json::Value::toStyledString().

Here is the caller graph for this function:

## Variable Documentation

## ◆ hex2

const char Json::hex2[]
| static

Initial value:
= "000102030405060708090a0b0c0d0e0f"
"101112131415161718191a1b1c1d1e1f"
"202122232425262728292a2b2c2d2e2f"
"303132333435363738393a3b3c3d3e3f"
"404142434445464748494a4b4c4d4e4f"
"505152535455565758595a5b5c5d5e5f"
"606162636465666768696a6b6c6d6e6f"
"707172737475767778797a7b7c7d7e7f"
"808182838485868788898a8b8c8d8e8f"
"909192939495969798999a9b9c9d9e9f"
"a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
"b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
"c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
"d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
"e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
"f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"

Definition at line 242 of file json_writer.cpp.

Referenced by toHex16Bit().

## ◆ maxUInt64AsDouble

const double Json::maxUInt64AsDouble = 18446744073709551615.0
| static

Definition at line 101 of file json_value.cpp.

Referenced by Json::Value::isIntegral(), and Json::Value::isUInt64().

Json::Value
Represents a JSON value.
Definition: value.h:176