diff options
| author | 2025-06-24 12:59:02 +0200 | |
|---|---|---|
| committer | 2025-06-24 12:59:02 +0200 | |
| commit | 238c5c5f3918f4c64df2364b7c25eb82fd8f16d2 (patch) | |
| tree | 018a43020a5cdcd09be19a3d27e1ab61abbe612b /xs_json.h | |
| parent | Updated RELEASE_NOTES. (diff) | |
| download | penes-snac2-238c5c5f3918f4c64df2364b7c25eb82fd8f16d2.tar.gz penes-snac2-238c5c5f3918f4c64df2364b7c25eb82fd8f16d2.tar.xz penes-snac2-238c5c5f3918f4c64df2364b7c25eb82fd8f16d2.zip | |
Some JSON code tweaks.
Diffstat (limited to 'xs_json.h')
| -rw-r--r-- | xs_json.h | 39 |
1 files changed, 22 insertions, 17 deletions
| @@ -8,6 +8,7 @@ | |||
| 8 | #define MAX_JSON_DEPTH 32 | 8 | #define MAX_JSON_DEPTH 32 |
| 9 | #endif | 9 | #endif |
| 10 | 10 | ||
| 11 | void xs_json_dump_value(const xs_val *data, int level, int indent, FILE *f); | ||
| 11 | int xs_json_dump(const xs_val *data, int indent, FILE *f); | 12 | int xs_json_dump(const xs_val *data, int indent, FILE *f); |
| 12 | xs_str *xs_json_dumps(const xs_val *data, int indent); | 13 | xs_str *xs_json_dumps(const xs_val *data, int indent); |
| 13 | 14 | ||
| @@ -77,7 +78,7 @@ static void _xs_json_indent(int level, int indent, FILE *f) | |||
| 77 | } | 78 | } |
| 78 | 79 | ||
| 79 | 80 | ||
| 80 | static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f) | 81 | void xs_json_dump_value(const xs_val *data, int level, int indent, FILE *f) |
| 81 | /* dumps partial data as JSON */ | 82 | /* dumps partial data as JSON */ |
| 82 | { | 83 | { |
| 83 | int c = 0; | 84 | int c = 0; |
| @@ -108,7 +109,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f) | |||
| 108 | fputc(',', f); | 109 | fputc(',', f); |
| 109 | 110 | ||
| 110 | _xs_json_indent(level + 1, indent, f); | 111 | _xs_json_indent(level + 1, indent, f); |
| 111 | _xs_json_dump(v, level + 1, indent, f); | 112 | xs_json_dump_value(v, level + 1, indent, f); |
| 112 | 113 | ||
| 113 | c++; | 114 | c++; |
| 114 | } | 115 | } |
| @@ -135,7 +136,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f) | |||
| 135 | if (indent) | 136 | if (indent) |
| 136 | fputc(' ', f); | 137 | fputc(' ', f); |
| 137 | 138 | ||
| 138 | _xs_json_dump(v, level + 1, indent, f); | 139 | xs_json_dump_value(v, level + 1, indent, f); |
| 139 | 140 | ||
| 140 | c++; | 141 | c++; |
| 141 | } | 142 | } |
| @@ -154,6 +155,20 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f) | |||
| 154 | } | 155 | } |
| 155 | 156 | ||
| 156 | 157 | ||
| 158 | int xs_json_dump(const xs_val *data, int indent, FILE *f) | ||
| 159 | /* dumps data into a file as JSON */ | ||
| 160 | { | ||
| 161 | xstype t = xs_type(data); | ||
| 162 | |||
| 163 | if (t == XSTYPE_LIST || t == XSTYPE_DICT) { | ||
| 164 | xs_json_dump_value(data, 0, indent, f); | ||
| 165 | return 1; | ||
| 166 | } | ||
| 167 | |||
| 168 | return 0; | ||
| 169 | } | ||
| 170 | |||
| 171 | |||
| 157 | xs_str *xs_json_dumps(const xs_val *data, int indent) | 172 | xs_str *xs_json_dumps(const xs_val *data, int indent) |
| 158 | /* dumps data as a JSON string */ | 173 | /* dumps data as a JSON string */ |
| 159 | { | 174 | { |
| @@ -173,20 +188,6 @@ xs_str *xs_json_dumps(const xs_val *data, int indent) | |||
| 173 | } | 188 | } |
| 174 | 189 | ||
| 175 | 190 | ||
| 176 | int xs_json_dump(const xs_val *data, int indent, FILE *f) | ||
| 177 | /* dumps data into a file as JSON */ | ||
| 178 | { | ||
| 179 | xstype t = xs_type(data); | ||
| 180 | |||
| 181 | if (t == XSTYPE_LIST || t == XSTYPE_DICT) { | ||
| 182 | _xs_json_dump(data, 0, indent, f); | ||
| 183 | return 1; | ||
| 184 | } | ||
| 185 | |||
| 186 | return 0; | ||
| 187 | } | ||
| 188 | |||
| 189 | |||
| 190 | /** JSON loads **/ | 191 | /** JSON loads **/ |
| 191 | 192 | ||
| 192 | typedef enum { | 193 | typedef enum { |
| @@ -370,6 +371,8 @@ int xs_json_load_array_iter(FILE *f, xs_val **value, xstype *pt, int *c) | |||
| 370 | else | 371 | else |
| 371 | return -1; | 372 | return -1; |
| 372 | } | 373 | } |
| 374 | else | ||
| 375 | *pt = xs_type(*value); | ||
| 373 | 376 | ||
| 374 | *c = *c + 1; | 377 | *c = *c + 1; |
| 375 | 378 | ||
| @@ -466,6 +469,8 @@ int xs_json_load_object_iter(FILE *f, xs_str **key, xs_val **value, xstype *pt, | |||
| 466 | else | 469 | else |
| 467 | return -1; | 470 | return -1; |
| 468 | } | 471 | } |
| 472 | else | ||
| 473 | *pt = xs_type(*value); | ||
| 469 | 474 | ||
| 470 | *c = *c + 1; | 475 | *c = *c + 1; |
| 471 | 476 | ||