Mercurial > code
annotate C++/modules/Json/Json.cpp @ 478:c7825b8c6145
Json:
- Finalize iterators,
- Add more tests,
- Add more asserts.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 10 Nov 2015 14:11:14 +0100 |
parents | b681299e6987 |
children | 3ee3f3e53ee3 |
rev | line source |
---|---|
244
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
405 | 2 * Json.cpp -- C++14 JSON manipulation using jansson parser |
244
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
403 | 4 * Copyright (c) 2013-2015 David Demelier <markand@malikania.fr> |
244
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
405 | 19 #include "Json.h" |
314 | 20 |
405 | 21 #include <jansson.h> |
244
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
404
9ab878fb9fa2
Json: bring classes into json namespace
David Demelier <markand@malikania.fr>
parents:
403
diff
changeset
|
23 namespace json { |
9ab878fb9fa2
Json: bring classes into json namespace
David Demelier <markand@malikania.fr>
parents:
403
diff
changeset
|
24 |
405 | 25 namespace { |
26 | |
27 void readObject(Value &parent, json_t *object); | |
28 void readArray(Value &parent, json_t *array); | |
29 | |
30 Value readValue(json_t *v) | |
31 { | |
32 if (json_is_null(v)) { | |
33 return Value{nullptr}; | |
34 } | |
35 if (json_is_string(v)) { | |
36 return Value{json_string_value(v)}; | |
37 } | |
406 | 38 if (json_is_real(v)) { |
405 | 39 return Value{json_number_value(v)}; |
40 } | |
406 | 41 if (json_is_integer(v)) { |
42 return Value{static_cast<int>(json_integer_value(v))}; | |
43 } | |
405 | 44 if (json_is_boolean(v)) { |
45 return Value{json_boolean_value(v)}; | |
46 } | |
47 if (json_is_object(v)) { | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
48 Value object{Type::Object}; |
405 | 49 |
50 readObject(object, v); | |
51 | |
52 return object; | |
53 } | |
54 if (json_is_array(v)) { | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
55 Value array{Type::Array}; |
405 | 56 |
57 readArray(array, v); | |
58 | |
59 return array; | |
60 } | |
61 | |
62 return Value{}; | |
63 } | |
64 | |
65 void readObject(Value &parent, json_t *object) | |
66 { | |
67 const char *key; | |
68 json_t *value; | |
69 | |
70 json_object_foreach(object, key, value) { | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
71 parent.insert(key, readValue(value)); |
405 | 72 } |
73 } | |
74 | |
75 void readArray(Value &parent, json_t *array) | |
76 { | |
77 size_t index; | |
78 json_t *value; | |
79 | |
80 json_array_foreach(array, index, value) { | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
81 parent.append(readValue(value)); |
405 | 82 } |
83 } | |
84 | |
85 template <typename Func, typename... Args> | |
86 Value convert(Func fn, Args&&... args) | |
87 { | |
88 json_error_t error; | |
89 json_t *json = fn(std::forward<Args>(args)..., &error); | |
90 | |
91 if (json == nullptr) { | |
92 throw Error{error.text, error.source, error.line, error.column, error.position}; | |
93 } | |
94 | |
95 Value value; | |
96 | |
97 if (json_is_object(json)) { | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
98 value = Value{Type::Object}; |
405 | 99 readObject(value, json); |
100 } else { | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
101 value = Value{Type::Array}; |
405 | 102 readArray(value, json); |
103 } | |
104 | |
105 json_decref(json); | |
106 | |
107 return value; | |
108 } | |
109 | |
110 } // !namespace | |
111 | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
112 void Value::copy(const Value &other) |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
113 { |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
114 switch (other.m_type) { |
478 | 115 case Type::Array: |
116 new (&m_array) std::deque<Value>(other.m_array); | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
117 break; |
478 | 118 case Type::Boolean: |
119 m_boolean = other.m_boolean; | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
120 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
121 case Type::Int: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
122 m_integer = other.m_integer; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
123 break; |
478 | 124 case Type::Object: |
125 new (&m_object) std::map<std::string, Value>(other.m_object); | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
126 break; |
478 | 127 case Type::Real: |
128 m_number = other.m_number; | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
129 break; |
478 | 130 case Type::String: |
131 new (&m_string) std::string(other.m_string); | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
132 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
133 default: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
134 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
135 } |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
136 |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
137 m_type = other.m_type; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
138 } |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
139 |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
140 void Value::move(Value &&other) |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
141 { |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
142 switch (other.m_type) { |
478 | 143 case Type::Array: |
144 new (&m_array) std::deque<Value>(std::move(other.m_array)); | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
145 break; |
478 | 146 case Type::Boolean: |
147 m_boolean = other.m_boolean; | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
148 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
149 case Type::Int: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
150 m_integer = other.m_integer; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
151 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
152 case Type::Object: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
153 new (&m_object) std::map<std::string, Value>(std::move(other.m_object)); |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
154 break; |
478 | 155 case Type::Real: |
156 m_number = other.m_number; | |
157 break; | |
158 case Type::String: | |
159 new (&m_string) std::string(std::move(other.m_string)); | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
160 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
161 default: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
162 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
163 } |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
164 |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
165 m_type = other.m_type; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
166 } |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
167 |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
168 Value::Value(Type type) |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
169 : m_type{type} |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
170 { |
478 | 171 switch (m_type) { |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
172 case Type::Array: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
173 new (&m_array) std::deque<Value>(); |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
174 break; |
478 | 175 case Type::Boolean: |
176 m_boolean = false; | |
177 break; | |
178 case Type::Int: | |
179 m_integer = 0; | |
180 break; | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
181 case Type::Object: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
182 new (&m_object) std::map<std::string, Value>(); |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
183 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
184 case Type::Real: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
185 m_number = 0; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
186 break; |
478 | 187 case Type::String: |
188 new (&m_string) std::string(); | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
189 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
190 default: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
191 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
192 } |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
193 } |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
194 |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
195 Value::~Value() |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
196 { |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
197 switch (m_type) { |
478 | 198 case Type::Array: |
199 m_array.~deque<Value>(); | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
200 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
201 case Type::Object: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
202 m_object.~map<std::string, Value>(); |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
203 break; |
478 | 204 case Type::String: |
205 m_string.~basic_string(); | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
206 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
207 default: |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
208 break; |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
209 } |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
210 } |
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
211 |
405 | 212 bool Value::toBool() const noexcept |
213 { | |
406 | 214 if (m_type != Type::Boolean) { |
405 | 215 return false; |
406 | 216 } |
405 | 217 |
218 return m_boolean; | |
219 } | |
220 | |
406 | 221 double Value::toReal() const noexcept |
405 | 222 { |
406 | 223 if (m_type != Type::Real) { |
405 | 224 return 0; |
406 | 225 } |
405 | 226 |
227 return m_number; | |
228 } | |
229 | |
406 | 230 int Value::toInt() const noexcept |
231 { | |
232 if (m_type != Type::Int) { | |
233 return 0; | |
234 } | |
235 | |
236 return m_integer; | |
237 } | |
238 | |
405 | 239 std::string Value::toString() const noexcept |
240 { | |
241 if (m_type != Type::String) { | |
242 return ""; | |
243 } | |
244 | |
245 return m_string; | |
246 } | |
244
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
248 Value::Value(const Buffer &buffer) |
244
777bc3cb665a
Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 { |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
250 *this = convert(json_loads, buffer.text.c_str(), 0); |
311 | 251 } |
252 | |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
253 Value::Value(const File &file) |
311 | 254 { |
475
b681299e6987
Json: removal of json::Object, json::Array, json::Document
David Demelier <markand@malikania.fr>
parents:
451
diff
changeset
|
255 *this = convert(json_load_file, file.path.c_str(), 0); |
404
9ab878fb9fa2
Json: bring classes into json namespace
David Demelier <markand@malikania.fr>
parents:
403
diff
changeset
|
256 } |
9ab878fb9fa2
Json: bring classes into json namespace
David Demelier <markand@malikania.fr>
parents:
403
diff
changeset
|
257 |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
258 std::string escape(const std::string &value) |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
259 { |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
260 std::string result; |
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
261 |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
262 for (auto it = value.begin(); it != value.end(); ++it) { |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
263 switch (*it) { |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
264 case '\\': |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
265 result += "\\\\"; |
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
266 break; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
267 case '/': |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
268 result += "\\/"; |
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
269 break; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
270 case '"': |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
271 result += "\\\""; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
272 break; |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
273 case '\b': |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
274 result += "\\b"; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
275 break; |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
276 case '\f': |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
277 result += "\\f"; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
278 break; |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
279 case '\n': |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
280 result += "\\n"; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
281 break; |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
282 case '\r': |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
283 result += "\\r"; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
284 break; |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
285 case '\t': |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
286 result += "\\t"; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
287 break; |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
288 default: |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
289 result += *it; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
290 break; |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
291 } |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
292 } |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
293 |
451
902b034df6e3
Json: escape string construct a new string
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
294 return result; |
445
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
295 } |
f5e62f6c1475
Json: add escape free function
David Demelier <markand@malikania.fr>
parents:
406
diff
changeset
|
296 |
406 | 297 } // !json |