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  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< 0, 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< CharReaderCharReaderPtr
 
typedef char UIntToStringBuffer[uintToStringBufferSize]
 
typedef std::auto_ptr< StreamWriterStreamWriterPtr
 

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 > &)
 
class __declspec (deprecated("Use CharReader and CharReaderBuilder instead.")) Reader
 Unserialize a JSON document into a Value. More...
 
bool parseFromStream (CharReader::Factory const &, IStream &, Value *root, String *errs)
 Consume entire stream and use its begin/end. More...
 
IStreamoperator>> (IStream &, Value &)
 Read from 'sin' into 'root'. More...
 
 __declspec (noreturn) void throwRuntimeError(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)
 
OStreamoperator<< (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, bool emitUTF8=false)
 
static void getValidWriterKeys (std::set< String > *valid_keys)
 

Variables

static const char hex2 []
 

Detailed Description

JSON (JavaScript Object Notation).

Typedef Documentation

◆ Allocator

template<typename T >
using Json::Allocator = typedef typename std::conditional< 0 , 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 57 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

Definition at line 153 of file config.h.

◆ 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

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 108 of file value.h.

◆ 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 118 of file value.h.

◆ 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 97 of file value.h.

Function Documentation

◆ __declspec() [1/4]

class Json::__declspec ( deprecated("Use CharReader and CharReaderBuilder instead.")  )

Unserialize a JSON document into a Value.

Deprecated:
Use CharReader and CharReaderBuilder.

An error tagged with where in the JSON text it was encountered.

The offsets give the [start, limit) range of bytes within the text. Note that this is bytes, not codepoints.

Constructs a Reader allowing all features for parsing.

Constructs a Reader allowing the specified feature set for parsing.

Read a Value from a JSON document.

Parameters
documentUTF-8 encoded string containing the document to read.
[out]rootContains the root value of the document if it was successfully parsed.
collectCommentstrue to collect comment and allow writing them back during serialization, false to discard comments. This parameter is ignored if Features::allowComments_ is false.
Returns
true if the document was successfully parsed, false if an error occurred.

Read a Value from a JSON document.

Parameters
beginDocPointer on the beginning of the UTF-8 encoded string of the document to read.
endDocPointer on the end of the UTF-8 encoded string of the document to read. Must be >= beginDoc.
[out]rootContains the root value of the document if it was successfully parsed.
collectCommentstrue to collect comment and allow writing them back during serialization, false to discard comments. This parameter is ignored if Features::allowComments_ is false.
Returns
true if the document was successfully parsed, false if an error occurred.

Parse from input stream.

See also
Json::operator>>(std::istream&, Json::Value&).

Returns a user friendly string that list errors in the parsed document.

Returns
Formatted error message with the list of errors with their location in the parsed document. An empty string is returned if no error occurred during parsing.
Deprecated:
Use getFormattedErrorMessages() instead (typo fix).

Returns a user friendly string that list errors in the parsed document.

Returns
Formatted error message with the list of errors with their location in the parsed document. An empty string is returned if no error occurred during parsing.

Returns a vector of structured errors encountered while parsing.

Returns
A (possibly empty) vector of StructuredError objects. Currently only one error can be returned, but the caller should tolerate multiple errors. This can occur if the parser recovers from a non-fatal parse error and then encounters additional errors.

Add a semantic error message.

Parameters
valueJSON Value location associated with the error
messageThe error message.
Returns
true if the error was successfully added, false if the Value offset exceeds the document size.

Add a semantic error message with extra context.

Parameters
valueJSON Value location associated with the error
messageThe error message.
extraAdditional JSON Value location to contextualize the error
Returns
true if the error was successfully added, false if either Value offset exceeds the document size.

Return whether there are any errors.

Returns
true if there are no errors to report false if errors have occurred.

Definition at line 37 of file reader.h.

References JSONCPP_DEPRECATED.

◆ __declspec() [2/4]

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() [3/4]

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
indentationEach level will be indented by this amount extra.

Serialize a Value in JSON format.

Parameters
outStream to write to. (Can be ostringstream, e.g.)
rootValue 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.

◆ __declspec() [4/4]

Json::__declspec ( noreturn  ) const &

used internally

Definition at line 210 of file json_value.cpp.

◆ cloneUnique()

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

Definition at line 54 of file json_value.cpp.

◆ codePointToUTF8()

static String Json::codePointToUTF8 ( unsigned int  cp)
inlinestatic

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

◆ duplicateAndPrefixStringValue()

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

Definition at line 135 of file json_value.cpp.

References JSON_ASSERT_MESSAGE, and Json::Value::maxInt.

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

◆ duplicateStringValue()

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

Duplicates the specified string value.

Parameters
valuePointer to the string to duplicate. Must be zero-terminated if length is "unknown".
lengthLength 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 117 of file json_value.cpp.

References Json::Value::maxInt.

◆ 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 ( )
inlinestatic

Definition at line 29 of file json_tool.h.

Referenced by fixNumericLocaleInput().

◆ getValidReaderKeys()

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

Definition at line 1883 of file json_reader.cpp.

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

◆ getValidWriterKeys()

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

Definition at line 1200 of file json_writer.cpp.

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

◆ InRange()

template<typename T , typename U >
static bool Json::InRange ( double  d,
min,
max 
)
inlinestatic

◆ isAnyCharRequiredQuoting()

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

Definition at line 176 of file json_writer.cpp.

Referenced by valueToQuotedStringN().

◆ IsIntegral()

static bool Json::IsIntegral ( double  d)
static

◆ 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 1252 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:

cin >> root["dir"]["file"];
cout << root;

Result:

* {
* "dir": {
*    "file": {
*    // The input stream JSON would be nested here.
*    }
* }
* }
* 
Exceptions
std::exceptionon parse error.
See also
Json::operator<<()

Definition at line 1961 of file json_reader.cpp.

References parseFromStream().

◆ 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 1949 of file json_reader.cpp.

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

Referenced by operator>>().

◆ releasePrefixedStringValue()

static void Json::releasePrefixedStringValue ( char *  value)
inlinestatic

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

Definition at line 184 of file json_value.cpp.

◆ releaseStringValue()

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

Definition at line 185 of file json_value.cpp.

◆ swap()

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

Definition at line 953 of file value.h.

References Json::Value::swap().

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

◆ toHex16Bit()

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

Definition at line 256 of file json_writer.cpp.

References hex2.

Referenced by valueToQuotedStringN().

◆ uintToString()

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

Converts an unsigned integer to string.

Parameters
valueUnsigned integer to convert to string
currentInput/Output string buffer. Must have at least uintToStringBufferSize chars free.

Definition at line 81 of file json_tool.h.

Referenced by valueToString().

◆ utf8ToCodepoint()

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

Definition at line 188 of file json_writer.cpp.

Referenced by valueToQuotedStringN().

◆ valueToQuotedString()

String Json::valueToQuotedString ( const char *  value)

Definition at line 347 of file json_writer.cpp.

References valueToQuotedStringN().

◆ valueToQuotedStringN()

static String Json::valueToQuotedStringN ( const char *  value,
unsigned  length,
bool  emitUTF8 = false 
)
static

Definition at line 267 of file json_writer.cpp.

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

Referenced by valueToQuotedString().

◆ valueToString() [1/6]

String Json::valueToString ( bool  value)

Definition at line 174 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 169 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().

◆ valueToString() [4/6]

String Json::valueToString ( LargestInt  value)

◆ 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 1245 of file json_writer.cpp.

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

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

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 239 of file json_writer.cpp.

Referenced by toHex16Bit().

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