casacore
|
Class to hold any JSON value. More...
#include <JsonValue.h>
Public Member Functions | |
JsonValue () | |
The default constructor results in a null value. More... | |
JsonValue (Bool) | |
Construct value with given type. More... | |
JsonValue (int) | |
JsonValue (Int64) | |
JsonValue (double) | |
JsonValue (const DComplex &) | |
JsonValue (const char *) | |
JsonValue (const String &) | |
JsonValue (const std::vector< JsonValue > &) | |
JsonValue (const JsonKVMap &) | |
JsonValue (const JsonValue &) | |
Copy constructor (copy semantics). More... | |
JsonValue & | operator= (const JsonValue &) |
Assignment (copy semantics). More... | |
~JsonValue () | |
Bool | isNull () const |
Is the value a null value? More... | |
Bool | isVector () const |
Is the value a vector? More... | |
Bool | isValueMap () const |
Is the value a value map? More... | |
size_t | size () const |
Return the size of a value vector or map (1 is returned for a scalar). More... | |
DataType | dataType () const |
Get the data type of the value. More... | |
DataType | arrayDataType () const |
Get the most common data type of the value inside a possibly nested vector. More... | |
DataType | vectorDataType (const std::vector< JsonValue > &vec) const |
IPosition | shape () const |
Get the shape of an array (possibly nested vector). More... | |
IPosition | vectorShape (const std::vector< JsonValue > &vec) const |
Bool | getBool () const |
Get the value in the given data type. More... | |
Int64 | getInt () const |
double | getDouble () const |
DComplex | getDComplex () const |
const String & | getString () const |
std::vector< Bool > | getVecBool () const |
As above, but get the value as a vector. More... | |
std::vector< Int64 > | getVecInt () const |
std::vector< double > | getVecDouble () const |
std::vector< DComplex > | getVecDComplex () const |
std::vector< String > | getVecString () const |
const std::vector< JsonValue > & | getVector () const |
const JsonKVMap & | getValueMap () const |
Get the value as a JsonKVMap (no conversion is possible). More... | |
Array< Bool > | getArrayBool () const |
Get the value as an Array. More... | |
Array< Int64 > | getArrayInt () const |
Array< double > | getArrayDouble () const |
Array< DComplex > | getArrayDComplex () const |
Array< String > | getArrayString () const |
void | get (Bool &value) const |
Get functions for templated purposes. More... | |
void | get (Int64 &value) const |
void | get (double &value) const |
void | get (DComplex &value) const |
void | get (String &value) const |
void | get (std::vector< Bool > &value) const |
void | get (std::vector< Int64 > &value) const |
void | get (std::vector< double > &value) const |
void | get (std::vector< DComplex > &value) const |
void | get (std::vector< String > &value) const |
void | get (std::vector< JsonValue > &value) const |
void | get (JsonKVMap &value) const |
Private Member Functions | |
void | clear () |
Remove the value. More... | |
void | copyValue (const JsonValue &that) |
Copy the value from another one. More... | |
template<typename T > | |
T * | fillArray (T *data, const T *dataEnd, const std::vector< JsonValue > &vec) const |
Fill an array from nested vector in a recursive way. More... | |
Private Attributes | |
DataType | itsDataType |
void * | itsValuePtr |
Friends | |
ostream & | operator<< (ostream &, const JsonValue &) |
Show value on given ostream. More... | |
Class to hold any JSON value.
Public interface
Class JsonValue can hold an arbitrary JSON value which can be a scalar, a JsonKVMap object, or a vector of JsonValue objects. In this way JSON values can be nested in any way.
Internally scalar values are kept as Bool, Int64, Double, DComplex or String values, but the class has functions to obtain the value in any data type as long as it can be converted. Note that conversion from Int64 to Bool is supported. Null is also a valid JsonValue. A null value can be obtained as a floating point value resulting in a NaN. For other types an exception is thrown.
It is possible to obtain the value as a multi-dimensional Array object if the values are regular, thus if nested vectors have the same sizes. The data type of an Array is the 'highest' data type of a value in it.
Normally a JsonValue objects is created by JsonParser and is the interface to obtain a value of a filed in a parsed JSON file. However, users can create JsonValue objects as well.
JSON is a commonly used interchange format.
Definition at line 89 of file JsonValue.h.
casacore::JsonValue::JsonValue | ( | ) |
The default constructor results in a null value.
casacore::JsonValue::JsonValue | ( | Bool | ) |
Construct value with given type.
casacore::JsonValue::JsonValue | ( | int | ) |
casacore::JsonValue::JsonValue | ( | Int64 | ) |
casacore::JsonValue::JsonValue | ( | double | ) |
casacore::JsonValue::JsonValue | ( | const DComplex & | ) |
casacore::JsonValue::JsonValue | ( | const char * | ) |
casacore::JsonValue::JsonValue | ( | const String & | ) |
casacore::JsonValue::JsonValue | ( | const std::vector< JsonValue > & | ) |
casacore::JsonValue::JsonValue | ( | const JsonKVMap & | ) |
casacore::JsonValue::JsonValue | ( | const JsonValue & | ) |
Copy constructor (copy semantics).
casacore::JsonValue::~JsonValue | ( | ) |
DataType casacore::JsonValue::arrayDataType | ( | ) | const |
Get the most common data type of the value inside a possibly nested vector.
- If the value is a single value, that type is returned.
- If any vector value is a ValueMap, TpRecord is returned.
- If any vector contains non-matching data types, TpOther is returned.
- Otherwise the 'highest' data type is returned.
Referenced by dataType().
|
private |
Remove the value.
Referenced by get().
|
private |
Copy the value from another one.
Referenced by get().
|
inline |
Get the data type of the value.
A ValueMap is returned as TpRecord, a vector as TpOther.
Definition at line 133 of file JsonValue.h.
References arrayDataType(), getArrayBool(), getArrayDComplex(), getArrayDouble(), getArrayInt(), getArrayString(), getBool(), getDComplex(), getDouble(), getInt(), getString(), getValueMap(), getVecBool(), getVecDComplex(), getVecDouble(), getVecInt(), getVecString(), getVector(), itsDataType, shape(), vectorDataType(), and vectorShape().
|
inlineprivate |
Fill an array from nested vector in a recursive way.
Definition at line 229 of file JsonValue.h.
References AlwaysAssert.
|
inline |
Get functions for templated purposes.
Definition at line 192 of file JsonValue.h.
References getBool(), and casacore::value().
|
inline |
Definition at line 194 of file JsonValue.h.
References getInt(), and casacore::value().
|
inline |
Definition at line 196 of file JsonValue.h.
References getDouble(), and casacore::value().
|
inline |
Definition at line 198 of file JsonValue.h.
References getDComplex(), and casacore::value().
|
inline |
Definition at line 200 of file JsonValue.h.
References getString(), and casacore::value().
|
inline |
Definition at line 202 of file JsonValue.h.
References getVecBool(), and casacore::value().
|
inline |
Definition at line 204 of file JsonValue.h.
References getVecInt(), and casacore::value().
|
inline |
Definition at line 206 of file JsonValue.h.
References getVecDouble(), and casacore::value().
|
inline |
Definition at line 208 of file JsonValue.h.
References getVecDComplex(), and casacore::value().
|
inline |
Definition at line 210 of file JsonValue.h.
References getVecString(), and casacore::value().
|
inline |
Definition at line 212 of file JsonValue.h.
References clear(), copyValue(), getVector(), operator<<, and casacore::value().
void casacore::JsonValue::get | ( | JsonKVMap & | value | ) | const |
Get the value as an Array.
The value must be a scalar or a regularly nested vector.
Referenced by dataType().
Array<DComplex> casacore::JsonValue::getArrayDComplex | ( | ) | const |
Referenced by dataType().
Array<double> casacore::JsonValue::getArrayDouble | ( | ) | const |
Referenced by dataType().
Referenced by dataType().
Referenced by dataType().
Bool casacore::JsonValue::getBool | ( | ) | const |
Get the value in the given data type.
Numeric data type promotion can be done as well as conversion of integer to bool (0=False, other=True). An exception is thrown if a mismatching data type is used.
Referenced by dataType(), and get().
DComplex casacore::JsonValue::getDComplex | ( | ) | const |
Referenced by dataType(), and get().
double casacore::JsonValue::getDouble | ( | ) | const |
Referenced by dataType(), and get().
Int64 casacore::JsonValue::getInt | ( | ) | const |
Referenced by dataType(), and get().
const String& casacore::JsonValue::getString | ( | ) | const |
Referenced by dataType(), and get().
const JsonKVMap& casacore::JsonValue::getValueMap | ( | ) | const |
Get the value as a JsonKVMap (no conversion is possible).
Referenced by dataType().
std::vector<Bool> casacore::JsonValue::getVecBool | ( | ) | const |
As above, but get the value as a vector.
If the value is a scalar, a vector with length 1 is returned.
Referenced by dataType(), and get().
std::vector<DComplex> casacore::JsonValue::getVecDComplex | ( | ) | const |
Referenced by dataType(), and get().
std::vector<double> casacore::JsonValue::getVecDouble | ( | ) | const |
Referenced by dataType(), and get().
std::vector<Int64> casacore::JsonValue::getVecInt | ( | ) | const |
Referenced by dataType(), and get().
std::vector<String> casacore::JsonValue::getVecString | ( | ) | const |
Referenced by dataType(), and get().
const std::vector<JsonValue>& casacore::JsonValue::getVector | ( | ) | const |
Referenced by dataType(), and get().
|
inline |
|
inline |
Is the value a value map?
Definition at line 125 of file JsonValue.h.
References itsDataType, and size().
|
inline |
IPosition casacore::JsonValue::shape | ( | ) | const |
Get the shape of an array (possibly nested vector).
An exception is thrown if a vector contains a ValueMap or if the array shape is irregular (nested vectors have different sizes).
Referenced by dataType().
size_t casacore::JsonValue::size | ( | ) | const |
Return the size of a value vector or map (1 is returned for a scalar).
Referenced by isValueMap().
DataType casacore::JsonValue::vectorDataType | ( | const std::vector< JsonValue > & | vec | ) | const |
Referenced by dataType().
Referenced by dataType().
|
friend |
Show value on given ostream.
Referenced by get().
|
private |
Definition at line 245 of file JsonValue.h.
Referenced by dataType(), isValueMap(), and isVector().
|
private |
Definition at line 246 of file JsonValue.h.
Referenced by isNull().