json.hpp File Reference

JSON input and output archives. More...

`#include "cereal/cereal.hpp"`
`#include "cereal/details/util.hpp"`
`#include "cereal/external/rapidjson/prettywriter.h"`
`#include "cereal/external/rapidjson/ostreamwrapper.h"`
`#include "cereal/external/rapidjson/istreamwrapper.h"`
`#include "cereal/external/rapidjson/document.h"`
`#include "cereal/external/base64.hpp"`
`#include <limits>`
`#include <sstream>`
`#include <stack>`
`#include <vector>`
`#include <string>`

Go to the source code of this file.

## Classes

struct | cereal::RapidJSONException
| An exception thrown when rapidjson fails an internal assertion. More...
class | cereal::JSONOutputArchive
| An output archive designed to save data to JSON. More...
class | cereal::JSONOutputArchive::Options
| A class containing various advanced options for the JSON archive. More...
class | cereal::JSONInputArchive
| An input archive designed to load data from JSON. More...

## Macros

#define | CEREAL_RAPIDJSON_ASSERT_THROWS
#define | CEREAL_RAPIDJSON_ASSERT(x)
#define | CEREAL_RAPIDJSON_WRITE_DEFAULT_FLAGS kWriteNanAndInfFlag
#define | CEREAL_RAPIDJSON_PARSE_DEFAULT_FLAGS kParseFullPrecisionFlag | kParseNanAndInfFlag

## Functions

template<class T >
void | cereal::prologue (JSONOutputArchive &, NameValuePair< T > const &)
| Prologue for NVPs for JSON archives. More...
template<class T >
void | cereal::prologue (JSONInputArchive &, NameValuePair< T > const &)
| Prologue for NVPs for JSON archives.
template<class T >
void | cereal::epilogue (JSONOutputArchive &, NameValuePair< T > const &)
| Epilogue for NVPs for JSON archives. More...
template<class T >
void | cereal::epilogue (JSONInputArchive &, NameValuePair< T > const &)
| Epilogue for NVPs for JSON archives. More...
template<class T >
void | cereal::prologue (JSONOutputArchive &, DeferredData< T > const &)
| Prologue for deferred data for JSON archives. More...
template<class T >
void | cereal::prologue (JSONInputArchive &, DeferredData< T > const &)
| Prologue for deferred data for JSON archives.
template<class T >
void | cereal::epilogue (JSONOutputArchive &, DeferredData< T > const &)
| Epilogue for deferred for JSON archives. More...
template<class T >
void | cereal::epilogue (JSONInputArchive &, DeferredData< T > const &)
| Epilogue for deferred for JSON archives. More...
template<class T >
void | cereal::prologue (JSONOutputArchive &ar, SizeTag< T > const &)
| Prologue for SizeTags for JSON archives. More...
template<class T >
void | cereal::prologue (JSONInputArchive &, SizeTag< T > const &)
| Prologue for SizeTags for JSON archives.
template<class T >
void | cereal::epilogue (JSONOutputArchive &, SizeTag< T > const &)
| Epilogue for SizeTags for JSON archives. More...
template<class T >
void | cereal::epilogue (JSONInputArchive &, SizeTag< T > const &)
| Epilogue for SizeTags for JSON archives.
template<class T , traits::EnableIf<!std::is_arithmetic< T >::value, !traits::has_minimal_base_class_serialization< T, traits::has_minimal_output_serialization, JSONOutputArchive >::value, !traits::has_minimal_output_serialization< T, JSONOutputArchive >::value > = traits::sfinae>
void | cereal::prologue (JSONOutputArchive &ar, T const &)
| Prologue for all other types for JSON archives (except minimal types) More...
template<class T , traits::EnableIf<!std::is_arithmetic< T >::value, !traits::has_minimal_base_class_serialization< T, traits::has_minimal_input_serialization, JSONInputArchive >::value, !traits::has_minimal_input_serialization< T, JSONInputArchive >::value > = traits::sfinae>
void | cereal::prologue (JSONInputArchive &ar, T const &)
| Prologue for all other types for JSON archives. More...
template<class T , traits::EnableIf<!std::is_arithmetic< T >::value, !traits::has_minimal_base_class_serialization< T, traits::has_minimal_output_serialization, JSONOutputArchive >::value, !traits::has_minimal_output_serialization< T, JSONOutputArchive >::value > = traits::sfinae>
void | cereal::epilogue (JSONOutputArchive &ar, T const &)
| Epilogue for all other types other for JSON archives (except minimal types) More...
template<class T , traits::EnableIf<!std::is_arithmetic< T >::value, !traits::has_minimal_base_class_serialization< T, traits::has_minimal_input_serialization, JSONInputArchive >::value, !traits::has_minimal_input_serialization< T, JSONInputArchive >::value > = traits::sfinae>
void | cereal::epilogue (JSONInputArchive &ar, T const &)
| Epilogue for all other types other for JSON archives. More...
void | cereal::prologue (JSONOutputArchive &ar, std::nullptr_t const &)
| Prologue for arithmetic types for JSON archives.
void | cereal::prologue (JSONInputArchive &, std::nullptr_t const &)
| Prologue for arithmetic types for JSON archives.
void | cereal::epilogue (JSONOutputArchive &, std::nullptr_t const &)
| Epilogue for arithmetic types for JSON archives.
void | cereal::epilogue (JSONInputArchive &, std::nullptr_t const &)
| Epilogue for arithmetic types for JSON archives.
template<class CharT , class Traits , class Alloc >
void | cereal::prologue (JSONOutputArchive &ar, std::basic_string< CharT, Traits, Alloc > const &)
| Prologue for strings for JSON archives.
template<class CharT , class Traits , class Alloc >
void | cereal::prologue (JSONInputArchive &, std::basic_string< CharT, Traits, Alloc > const &)
| Prologue for strings for JSON archives.
template<class CharT , class Traits , class Alloc >
void | cereal::epilogue (JSONOutputArchive &, std::basic_string< CharT, Traits, Alloc > const &)
| Epilogue for strings for JSON archives.
template<class CharT , class Traits , class Alloc >
void | cereal::epilogue (JSONInputArchive &, std::basic_string< CharT, Traits, Alloc > const &)
| Epilogue for strings for JSON archives.
template<class T >
void | cereal::CEREAL_SAVE_FUNCTION_NAME (JSONOutputArchive &ar, NameValuePair< T > const &t)
| Serializing NVP types to JSON.
template<class T >
void | cereal::CEREAL_LOAD_FUNCTION_NAME (JSONInputArchive &ar, NameValuePair< T > &t)
void | cereal::CEREAL_SAVE_FUNCTION_NAME (JSONOutputArchive &ar, std::nullptr_t const &t)
| Saving for nullptr to JSON.
void | cereal::CEREAL_LOAD_FUNCTION_NAME (JSONInputArchive &ar, std::nullptr_t &t)
| Loading arithmetic from JSON.
template<class T , traits::EnableIf< std::is_arithmetic< T >::value > = traits::sfinae>
void | cereal::CEREAL_SAVE_FUNCTION_NAME (JSONOutputArchive &ar, T const &t)
| Saving for arithmetic to JSON.
template<class T , traits::EnableIf< std::is_arithmetic< T >::value > = traits::sfinae>
void | cereal::CEREAL_LOAD_FUNCTION_NAME (JSONInputArchive &ar, T &t)
| Loading arithmetic from JSON.
template<class CharT , class Traits , class Alloc >
void | cereal::CEREAL_SAVE_FUNCTION_NAME (JSONOutputArchive &ar, std::basic_string< CharT, Traits, Alloc > const &str)
| saving string to JSON
template<class CharT , class Traits , class Alloc >
void | cereal::CEREAL_LOAD_FUNCTION_NAME (JSONInputArchive &ar, std::basic_string< CharT, Traits, Alloc > &str)
| loading string from JSON
template<class T >
void | cereal::CEREAL_SAVE_FUNCTION_NAME (JSONOutputArchive &, SizeTag< T > const &)
| Saving SizeTags to JSON.
template<class T >
void | cereal::CEREAL_LOAD_FUNCTION_NAME (JSONInputArchive &ar, SizeTag< T > &st)
| Loading SizeTags from JSON.

## Detailed Description

JSON input and output archives.

## Macro Definition Documentation

## CEREAL_RAPIDJSON_ASSERT

#define CEREAL_RAPIDJSON_ASSERT | ( |  | x | ) |

Value:
if(!(x)){ \
throw ::cereal::RapidJSONException("rapidjson internal assertion failure: " #x); }

## Function Documentation

## epilogue() [1/7]

template<class T >

void cereal::epilogue | ( | JSONInputArchive & | ,
|  | DeferredData< T > const & |
| ) |  |

inline

Epilogue for deferred for JSON archives.

Do nothing for the defer wrapper

## epilogue() [2/7]

template<class T >

void cereal::epilogue | ( | JSONInputArchive & | ,
|  | NameValuePair< T > const & |
| ) |  |

inline

Epilogue for NVPs for JSON archives.

NVPs do not start or finish nodes - they just set up the names

## epilogue() [3/7]

template<class T , traits::EnableIf<!std::is_arithmetic< T >::value, !traits::has_minimal_base_class_serialization< T, traits::has_minimal_input_serialization, JSONInputArchive >::value, !traits::has_minimal_input_serialization< T, JSONInputArchive >::value > = traits::sfinae>

void cereal::epilogue | ( | JSONInputArchive & | ar,
|  | T const & |
| ) |  |

inline

Epilogue for all other types other for JSON archives.

Epilogue for arithmetic types for JSON archives.

## epilogue() [4/7]

template<class T >

void cereal::epilogue | ( | JSONOutputArchive & | ,
|  | DeferredData< T > const & |
| ) |  |

inline

Epilogue for deferred for JSON archives.

NVPs do not start or finish nodes - they just set up the names

## epilogue() [5/7]

template<class T >

void cereal::epilogue | ( | JSONOutputArchive & | ,
|  | NameValuePair< T > const & |
| ) |  |

inline

Epilogue for NVPs for JSON archives.

NVPs do not start or finish nodes - they just set up the names

## epilogue() [6/7]

template<class T >

void cereal::epilogue | ( | JSONOutputArchive & | ,
|  | SizeTag< T > const & |
| ) |  |

inline

Epilogue for SizeTags for JSON archives.

SizeTags are strictly ignored for JSON

## epilogue() [7/7]

template<class T , traits::EnableIf<!std::is_arithmetic< T >::value, !traits::has_minimal_base_class_serialization< T, traits::has_minimal_output_serialization, JSONOutputArchive >::value, !traits::has_minimal_output_serialization< T, JSONOutputArchive >::value > = traits::sfinae>

void cereal::epilogue | ( | JSONOutputArchive & | ar,
|  | T const & |
| ) |  |

inline

Epilogue for all other types other for JSON archives (except minimal types)

Epilogue for arithmetic types for JSON archives.

Finishes the node created in the prologue

Minimal types do not start or finish nodes

## prologue() [1/5]

template<class T , traits::EnableIf<!std::is_arithmetic< T >::value, !traits::has_minimal_base_class_serialization< T, traits::has_minimal_input_serialization, JSONInputArchive >::value, !traits::has_minimal_input_serialization< T, JSONInputArchive >::value > = traits::sfinae>

void cereal::prologue | ( | JSONInputArchive & | ar,
|  | T const & |
| ) |  |

inline

Prologue for all other types for JSON archives.

Prologue for arithmetic types for JSON archives.

## prologue() [2/5]

template<class T >

void cereal::prologue | ( | JSONOutputArchive & | ,
|  | DeferredData< T > const & |
| ) |  |

inline

Prologue for deferred data for JSON archives.

Do nothing for the defer wrapper

## prologue() [3/5]

template<class T >

void cereal::prologue | ( | JSONOutputArchive & | ,
|  | NameValuePair< T > const & |
| ) |  |

inline

Prologue for NVPs for JSON archives.

NVPs do not start or finish nodes - they just set up the names

## prologue() [4/5]

template<class T >

void cereal::prologue | ( | JSONOutputArchive & | ar,
|  | SizeTag< T > const & |
| ) |  |

inline

Prologue for SizeTags for JSON archives.

SizeTags are strictly ignored for JSON, they just indicate that the current node should be made into an array

## prologue() [5/5]

template<class T , traits::EnableIf<!std::is_arithmetic< T >::value, !traits::has_minimal_base_class_serialization< T, traits::has_minimal_output_serialization, JSONOutputArchive >::value, !traits::has_minimal_output_serialization< T, JSONOutputArchive >::value > = traits::sfinae>

void cereal::prologue | ( | JSONOutputArchive & | ar,
|  | T const & |
| ) |  |

inline

Prologue for all other types for JSON archives (except minimal types)

Prologue for arithmetic types for JSON archives.

Starts a new node, named either automatically or by some NVP, that may be given data by the type about to be archived

Minimal types do not start or finish nodes