CASM
AClustersApproachtoStatisticalMechanics
|
#include <jsonParser.hh>
jsonParser allows for reading / writing JSON data
JSON consists of values, which can be of type: object, array, float, int, str, null, bool object: map/dict of <string, JSON value> array: vector/list of JSON values
value[string] -> value iff object value[int] -> value iff array value.get<type>() -> type must be correct type
Assumes functions exist for each type T to read/write: jsonParser& to_json( const T &value, jsonParser &json) void from_json( T &value, const jsonParser &json);
These functions exist for basic types (bool, int, double, std::string), and the containers: Eigen::MatrixXd, CASM::Array, CASM::Matrix, CASM::Vector, So if they also exist for the type being contained, you can read/write the entire object as a JSON array or nested JSON arrays
Simple Usage:
Reading data from a JSON file:
jsonParser json("myfile.json");
Three ways to get data of type T:
T t; from_json(t, json["path"]["to"]["object"]["data"]); <– use [std::string] for JSON values of any type t = json["path"]["to"]["object"]["data"].get<T>(); t = from_json<T>(json["path"]["to"]["array"][0]); <– use [int] for JSON arrays only
Check if 'name' in JSON object:
if( json.contains("other_data") ) from_json( array, json["other_data"]);
Writing data to a JSON file:
jsonParser json; json["mydata"].put(mydata); <– if ["mydata"] does not exist, it is created, else overwrites json["more_data"].put(more_data);
ofstream file("myfile.json"); json.write(file); file.close();
Definition at line 78 of file jsonParser.hh.
Public Types | |
typedef json_spirit::mObject::size_type | size_type |
typedef jsonParserIterator< false > | iterator |
typedef jsonParserIterator< true > | const_iterator |
Public Member Functions | |
jsonParser () | |
Create a new empty jsonParser. More... | |
template<typename T > | |
jsonParser (T &t) | |
template<typename T > | |
jsonParser (const T &t) | |
bool | read (std::istream &stream) |
Reads json from the stream. More... | |
bool | read (const boost::filesystem::path &mypath) |
Reads json from a path. More... | |
void | print (std::ostream &stream, unsigned int indent=2, unsigned int prec=12) const |
Print json to stream. More... | |
void | write (const std::string &file_name, unsigned int indent=2, unsigned int prec=12) const |
Write json to file. More... | |
void | write (const boost::filesystem::path &mypath, unsigned int indent=2, unsigned int prec=12) const |
Write json to file. More... | |
bool | operator!= (const jsonParser &json) const |
bool | almost_equal (const jsonParser &B, double tol) const |
bool | is_null () const |
Check if null type. More... | |
bool | is_bool () const |
Check if bool type. More... | |
bool | is_int () const |
Check if int type. More... | |
bool | is_number () const |
Check if number type (not including int) More... | |
bool | is_string () const |
Check if string. More... | |
bool | is_obj () const |
Check if object type. More... | |
bool | is_array () const |
Check if array type. More... | |
jsonParser & | operator[] (const std::string &name) |
const jsonParser & | operator[] (const std::string &name) const |
jsonParser & | at (const fs::path &path) |
const jsonParser & | at (const fs::path &path) const |
jsonParser & | operator[] (const int &element) |
Return a reference to the sub-jsonParser (JSON value) from index 'element' iff jsonParser is a JSON array. More... | |
const jsonParser & | operator[] (const int &element) const |
Return a const reference to the sub-jsonParser (JSON value) from index 'element' iff jsonParser is a JSON array. More... | |
size_type | size () const |
Returns array size if *this is a JSON array, object size if *this is a JSON object, 1 otherwise. More... | |
iterator | begin () |
Returns const_iterator to beginning of JSON object or JSON array. More... | |
const_iterator | begin () const |
Returns iterator to beginning of JSON object or JSON array. More... | |
iterator | end () |
Returns iterator to end of JSON object or JSON array. More... | |
const_iterator | end () const |
Returns const_iterator to end of JSON object or JSON array. More... | |
const_iterator | cbegin () const |
Returns const_iterator to beginning of JSON object or JSON array. More... | |
const_iterator | cend () const |
Returns const_iterator to end of JSON object or JSON array. More... | |
iterator | find (const std::string &name) |
Return iterator to JSON object value with 'name'. More... | |
const_iterator | find (const std::string &name) const |
Return const_iterator to JSON object value with 'name'. More... | |
bool | contains (const std::string &name) const |
Return true if JSON object contains 'name'. More... | |
size_type | erase (const std::string &name) |
Erase key:value pair from an object. More... | |
template<typename T , typename... Args> | |
T | get (Args...args) const |
Get data from json, using one of several alternatives. More... | |
template<typename T , typename... Args> | |
void | get (T &t, Args...args) const |
template<typename T , typename... Args> | |
bool | get_if (T &t, const std::string &key, Args...args) const |
template<typename T , typename... Args> | |
bool | get_else (T &t, const std::string &key, const T &default_value, Args...args) const |
template<typename T > | |
jsonParser & | operator= (const T &value) |
Puts data of any type T for which 'jsonParser& to_json( const T &value, jsonParser &json)' is defined. More... | |
template<typename T > | |
jsonParser & | push_back (const T &value) |
Puts new valued element at end of array of any type T for which 'jsonParser& to_json( const T &value, jsonParser &json)' is defined. More... | |
template<typename T > | |
jsonParser & | put (const T &value) |
Puts data of any type T for which 'jsonParser& to_json( const T &value, jsonParser &json)' is defined (same as 'operator=') More... | |
jsonParser & | put_obj () |
Puts new empty JSON object. More... | |
template<typename Iterator > | |
jsonParser & | put_obj (Iterator begin, Iterator end) |
Puts new JSON object, from iterators over a range of values of type std::pair<std::string, T> More... | |
jsonParser & | put_array () |
Puts new empty JSON array. More... | |
jsonParser & | put_array (size_type N) |
Puts new JSON array. More... | |
template<typename T > | |
jsonParser & | put_array (size_type N, const T &t) |
Puts new JSON array, using the same value. More... | |
template<typename Iterator > | |
jsonParser & | put_array (Iterator begin, Iterator end, typename CASM_TMP::enable_if_iterator< Iterator >::type *=nullptr) |
Puts new JSON array, from iterators. More... | |
jsonParser & | put_null () |
Puts 'null' JSON value. More... | |
Static Public Member Functions | |
static jsonParser | parse (const std::string &str) |
Construct a jsonParser from a string containing JSON data. More... | |
static jsonParser | parse (const fs::path &path) |
Construct a jsonParser from a file containing JSON data. More... | |
static jsonParser | parse (std::istream &stream) |
Construct a jsonParser from a stream containing JSON data. More... | |
static jsonParser | object () |
Returns an empty json object. More... | |
template<typename Iterator > | |
static jsonParser | object (Iterator begin, Iterator end) |
Puts new JSON object, from iterators over a range of values of type std::pair<std::string, T> More... | |
static jsonParser | array () |
Returns an empty json array. More... | |
static jsonParser | array (size_type N) |
Returns an empty json array. More... | |
template<typename T > | |
static jsonParser | array (size_type N, const T &t) |
Puts new JSON array, using the same value. More... | |
template<typename Iterator > | |
static jsonParser | array (Iterator begin, Iterator end, typename CASM_TMP::enable_if_iterator< Iterator >::type *=nullptr) |
Puts new JSON array, from iterators. More... | |
static jsonParser | null () |
Returns a null JSON value. More... | |
Private Member Functions | |
jsonParser & | operator= (const json_spirit::mValue &value) |
typedef jsonParserIterator<true> CASM::jsonParser::const_iterator |
Definition at line 84 of file jsonParser.hh.
typedef jsonParserIterator<false> CASM::jsonParser::iterator |
Definition at line 83 of file jsonParser.hh.
typedef json_spirit::mObject::size_type CASM::jsonParser::size_type |
Definition at line 82 of file jsonParser.hh.
|
inline |
Create a new empty jsonParser.
Definition at line 89 of file jsonParser.hh.
|
inlineexplicit |
Create a jsonParser from any other object for which 'to_json(t, json)' is defined
To parse a std::string as JSON, rather than store it verbatim, use jsonParser::parse
Definition at line 96 of file jsonParser.hh.
|
inlineexplicit |
Create a jsonParser from any other object for which 'to_json(t, json)' is defined
To parse a std::string as JSON, rather than store it verbatim, use jsonParser::parse
Definition at line 104 of file jsonParser.hh.
bool CASM::jsonParser::almost_equal | ( | const jsonParser & | B, |
double | tol | ||
) | const |
Definition at line 211 of file jsonParser.cc.
|
inlinestatic |
Returns an empty json array.
Definition at line 342 of file jsonParser.hh.
|
inlinestatic |
Returns an empty json array.
Definition at line 348 of file jsonParser.hh.
|
inlinestatic |
Puts new JSON array, using the same value.
Definition at line 355 of file jsonParser.hh.
|
inlinestatic |
Puts new JSON array, from iterators.
Definition at line 362 of file jsonParser.hh.
jsonParser & CASM::jsonParser::at | ( | const fs::path & | path | ) |
Return a reference to the sub-jsonParser (JSON value) with specified relative path Will throw if the 'path' doesn't exist.
Return a reference to the sub-jsonParser (JSON value) with specified relative path Will throw if the 'path' doesn't exist.
Definition at line 321 of file jsonParser.cc.
const jsonParser & CASM::jsonParser::at | ( | const fs::path & | path | ) | const |
Return a reference to the sub-jsonParser (JSON value) with specified relative path Will throw if the 'path' doesn't exist.
Return a reference to the sub-jsonParser (JSON value) with specified relative path Will throw if the 'path' doesn't exist.
Definition at line 330 of file jsonParser.cc.
jsonParser::iterator CASM::jsonParser::begin | ( | ) |
Returns const_iterator to beginning of JSON object or JSON array.
Returns iterator to beginning of JSON object or JSON array.
Definition at line 440 of file jsonParser.cc.
jsonParser::const_iterator CASM::jsonParser::begin | ( | ) | const |
Returns iterator to beginning of JSON object or JSON array.
Returns const_iterator to beginning of JSON object or JSON array.
Definition at line 450 of file jsonParser.cc.
jsonParser::const_iterator CASM::jsonParser::cbegin | ( | ) | const |
Returns const_iterator to beginning of JSON object or JSON array.
Returns const iterator to beginning of const JSON object or JSON array.
Definition at line 455 of file jsonParser.cc.
jsonParser::const_iterator CASM::jsonParser::cend | ( | ) | const |
Returns const_iterator to end of JSON object or JSON array.
Definition at line 480 of file jsonParser.cc.
bool CASM::jsonParser::contains | ( | const std::string & | name | ) | const |
Return true if JSON object contains 'name'.
Definition at line 500 of file jsonParser.cc.
jsonParser::iterator CASM::jsonParser::end | ( | ) |
Returns iterator to end of JSON object or JSON array.
Definition at line 465 of file jsonParser.cc.
jsonParser::const_iterator CASM::jsonParser::end | ( | ) | const |
Returns const_iterator to end of JSON object or JSON array.
Returns iterator to end of JSON object or JSON array.
Definition at line 475 of file jsonParser.cc.
json_spirit::mObject::size_type CASM::jsonParser::erase | ( | const std::string & | name | ) |
Erase key:value pair from an object.
Erase key:value pair from an object Returns the number of elements erased, which will be 0 or 1
Definition at line 506 of file jsonParser.cc.
jsonParser::iterator CASM::jsonParser::find | ( | const std::string & | name | ) |
Return iterator to JSON object value with 'name'.
Definition at line 490 of file jsonParser.cc.
jsonParser::const_iterator CASM::jsonParser::find | ( | const std::string & | name | ) | const |
Return const_iterator to JSON object value with 'name'.
Definition at line 495 of file jsonParser.cc.
bool CASM::jsonParser::is_array | ( | ) | const |
Check if array type.
Definition at line 281 of file jsonParser.cc.
bool CASM::jsonParser::is_bool | ( | ) | const |
Check if bool type.
Definition at line 256 of file jsonParser.cc.
bool CASM::jsonParser::is_int | ( | ) | const |
Check if int type.
Definition at line 261 of file jsonParser.cc.
bool CASM::jsonParser::is_null | ( | ) | const |
Check if null type.
Definition at line 251 of file jsonParser.cc.
bool CASM::jsonParser::is_number | ( | ) | const |
Check if number type (not including int)
Definition at line 266 of file jsonParser.cc.
bool CASM::jsonParser::is_obj | ( | ) | const |
Check if object type.
Definition at line 276 of file jsonParser.cc.
bool CASM::jsonParser::is_string | ( | ) | const |
Check if string.
Definition at line 271 of file jsonParser.cc.
|
inlinestatic |
Returns a null JSON value.
Definition at line 371 of file jsonParser.hh.
|
inlinestatic |
Returns an empty json object.
Definition at line 329 of file jsonParser.hh.
|
inlinestatic |
Puts new JSON object, from iterators over a range of values of type std::pair<std::string, T>
Definition at line 336 of file jsonParser.hh.
|
inline |
Definition at line 157 of file jsonParser.hh.
|
inlineprivate |
Definition at line 378 of file jsonParser.hh.
jsonParser & CASM::jsonParser::operator[] | ( | const std::string & | name | ) |
Return a reference to the sub-jsonParser (JSON value) with 'name' if it exists If it does not exist, create it with an empty JSON object and return a reference to it
Return a reference to the sub-jsonParser (JSON value) with 'name' if it exists If it does not exist, create it with value == 'null' and return a reference
Definition at line 290 of file jsonParser.cc.
const jsonParser & CASM::jsonParser::operator[] | ( | const std::string & | name | ) | const |
Return a reference to the sub-jsonParser (JSON value) with 'name' if it exists. Will throw if the 'name' doesn't exist.
Definition at line 304 of file jsonParser.cc.
jsonParser & CASM::jsonParser::operator[] | ( | const int & | element | ) |
Return a reference to the sub-jsonParser (JSON value) from index 'element' iff jsonParser is a JSON array.
Definition at line 368 of file jsonParser.cc.
const jsonParser & CASM::jsonParser::operator[] | ( | const int & | element | ) | const |
Return a const reference to the sub-jsonParser (JSON value) from index 'element' iff jsonParser is a JSON array.
Definition at line 374 of file jsonParser.cc.
|
inlinestatic |
Construct a jsonParser from a string containing JSON data.
Definition at line 312 of file jsonParser.hh.
|
inlinestatic |
Construct a jsonParser from a file containing JSON data.
Definition at line 319 of file jsonParser.hh.
|
inlinestatic |
Construct a jsonParser from a stream containing JSON data.
Definition at line 324 of file jsonParser.hh.
void CASM::jsonParser::print | ( | std::ostream & | stream, |
unsigned int | indent = 2 , |
||
unsigned int | prec = 12 |
||
) | const |
|
inline |
Puts new empty JSON array.
Definition at line 285 of file jsonParser.hh.
|
inline |
Puts new JSON array.
Definition at line 290 of file jsonParser.hh.
|
inline |
Puts 'null' JSON value.
Definition at line 305 of file jsonParser.hh.
|
inline |
Puts new empty JSON object.
Definition at line 276 of file jsonParser.hh.
bool CASM::jsonParser::read | ( | std::istream & | stream | ) |
Reads json from the stream.
Definition at line 165 of file jsonParser.cc.
bool CASM::jsonParser::read | ( | const boost::filesystem::path & | mypath | ) |
Reads json from a path.
Definition at line 169 of file jsonParser.cc.
jsonParser::size_type CASM::jsonParser::size | ( | ) | const |
Returns array size if *this is a JSON array, object size if *this is a JSON object, 1 otherwise.
Definition at line 430 of file jsonParser.cc.
void CASM::jsonParser::write | ( | const std::string & | file_name, |
unsigned int | indent = 2 , |
||
unsigned int | prec = 12 |
||
) | const |
Write json to file.
Definition at line 191 of file jsonParser.cc.
void CASM::jsonParser::write | ( | const boost::filesystem::path & | mypath, |
unsigned int | indent = 2 , |
||
unsigned int | prec = 12 |
||
) | const |
Write json to file.
Definition at line 199 of file jsonParser.cc.