1#ifndef NEFORCE_CORE_FILE_JSON_JSON_BUILDER_HPP__
2#define NEFORCE_CORE_FILE_JSON_JSON_BUILDER_HPP__
15NEFORCE_BEGIN_NAMESPACE__
38class NEFORCE_API json_builder {
56 range_type type = object;
70 frame(
const frame&) =
default;
71 frame& operator=(
const frame&) =
default;
72 frame(frame&&)
noexcept =
default;
73 frame& operator=(frame&&)
noexcept =
default;
96 if (contexts_.empty()) {
98 NEFORCE_THROW_EXCEPTION(
json_exception(
"Multiple root values not allowed"));
102 const auto& top = contexts_.top();
103 if (top.type == array) {
104 top.array_ptr->add_element(_NEFORCE
move(
value));
105 }
else if (top.type ==
object) {
106 if (current_key_.empty()) {
107 NEFORCE_THROW_EXCEPTION(
json_exception(
"No key set for value in object"));
109 top.object_ptr->add_member(current_key_, _NEFORCE
move(
value));
110 current_key_.clear();
122 template <
typename Iterable>
124 return this->value_iterable_impl(iterable);
133 template <
typename Map>
136 for (
const auto&
pair: maplike) {
149 template <
typename Iterable>
152 for (
const auto& element: iterable) {
153 this->value(element);
160 json_builder() =
default;
161 ~json_builder() =
default;
163 json_builder(
const json_builder&) =
delete;
164 json_builder& operator=(
const json_builder&) =
delete;
166 json_builder(json_builder&& other)
noexcept =
default;
167 json_builder& operator=(json_builder&& other)
noexcept =
default;
295 template <
typename Iterable>
296 json_builder&
value(
const Iterable& iterable) {
297 return this->value_iterable_dispatch(iterable);
333NEFORCE_END_NAMESPACE__
json_builder & end_object()
结束当前JSON对象
json_builder & value(nullptr_t np)
设置null值
json_builder & value(const string &value)
设置字符串值
json_builder & value(const string_view value)
设置字符串视图值
json_builder & value(const double value)
设置双精度浮点数值
json_builder & value(const char *value)
设置C字符串值
json_builder & value(const bool value)
设置布尔值
json_builder & key(const string &key)
设置当前对象的键名
json_builder & value_array(const function< void(json_builder &)> &build_func)
使用函数式方式构建数组值
json_builder & value(unique_ptr< json_value > &&value)
设置已构建的JSON值
json_builder & value(const int value)
设置整数值
json_builder & begin_object()
开始一个JSON对象
json_builder & end_array()
结束当前JSON数组
json_builder & value_object(const function< void(json_builder &)> &build_func)
使用函数式方式构建对象值
json_builder & begin_array()
开始一个JSON数组
json_builder & value(const Iterable &iterable)
设置可迭代对象的值
unique_ptr< json_value > build()
构建JSON文档
decltype(nullptr) nullptr_t
空指针类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名
constexpr unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr