| 237 | } |
| 238 | |
| 239 | void parse_object(JsonObject &obj, const char *json) |
| 240 | { |
| 241 | CE_ENSURE(NULL != json); |
| 242 | |
| 243 | if (*json == '{') { |
| 244 | json = skip_spaces(++json); |
| 245 | |
| 246 | if (*json == '}') { |
| 247 | obj._end = json + 1; |
| 248 | return; |
| 249 | } |
| 250 | |
| 251 | while (*json) { |
| 252 | const char *key_begin = *json == '"' ? (json + 1) : json; |
| 253 | |
| 254 | TempAllocator256 ta; |
| 255 | DynamicString key(ta); |
| 256 | parse_string(key, json); |
| 257 | |
| 258 | StringView fs_key(key_begin, key.length()); |
| 259 | |
| 260 | json = skip_string(json); |
| 261 | json = skip_spaces(json); |
| 262 | json = next(json, ':'); |
| 263 | json = skip_spaces(json); |
| 264 | |
| 265 | hash_map::set(obj._map, fs_key, json); |
| 266 | |
| 267 | json = skip_value(json); |
| 268 | json = skip_spaces(json); |
| 269 | |
| 270 | if (*json == '}') { |
| 271 | obj._end = json + 1; |
| 272 | return; |
| 273 | } |
| 274 | |
| 275 | json = next(json, ','); |
| 276 | json = skip_spaces(json); |
| 277 | } |
| 278 | } |
| 279 | |
| 280 | CE_FATAL("Bad object"); |
| 281 | } |
| 282 | |
| 283 | void parse(JsonObject &obj, const char *json) |
| 284 | { |