- for (;;) {
- bufstr_set(_json_buffer, len, ftos(++n));
- if (!_json_parse_value()) if (required) JSON_FAIL("expected value"); else break;
- bufstr_add(_json_buffer, strcat(_json_ns, ".", ftos(n)), 0);
+ for (int n = 0; ; n++) {
+ string key = ftos(n);
+ key = _json_ns ? strcat(_json_ns, ".", key) : key;
+ int it = bufstr_add(_json_buffer, key, 0);
+ bool ret = false; WITH(string, _json_ns, key, ret = _json_parse_value());
+ if (!ret) {
+ bufstr_set(_json_buffer, it, string_null);
+ if (required) JSON_FAIL("expected value"); else break;
+ }
+ bufstr_set(_json_buffer, len, ftos(n + 1));