From 238c5c5f3918f4c64df2364b7c25eb82fd8f16d2 Mon Sep 17 00:00:00 2001 From: grunfink Date: Tue, 24 Jun 2025 12:59:02 +0200 Subject: Some JSON code tweaks. --- xs_json.h | 39 ++++++++++++++++++++++----------------- xs_version.h | 2 +- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/xs_json.h b/xs_json.h index 436fa72..07800fa 100644 --- a/xs_json.h +++ b/xs_json.h @@ -8,6 +8,7 @@ #define MAX_JSON_DEPTH 32 #endif +void xs_json_dump_value(const xs_val *data, int level, int indent, FILE *f); int xs_json_dump(const xs_val *data, int indent, FILE *f); xs_str *xs_json_dumps(const xs_val *data, int indent); @@ -77,7 +78,7 @@ static void _xs_json_indent(int level, int indent, FILE *f) } -static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f) +void xs_json_dump_value(const xs_val *data, int level, int indent, FILE *f) /* dumps partial data as JSON */ { int c = 0; @@ -108,7 +109,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f) fputc(',', f); _xs_json_indent(level + 1, indent, f); - _xs_json_dump(v, level + 1, indent, f); + xs_json_dump_value(v, level + 1, indent, f); c++; } @@ -135,7 +136,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f) if (indent) fputc(' ', f); - _xs_json_dump(v, level + 1, indent, f); + xs_json_dump_value(v, level + 1, indent, f); c++; } @@ -154,6 +155,20 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f) } +int xs_json_dump(const xs_val *data, int indent, FILE *f) +/* dumps data into a file as JSON */ +{ + xstype t = xs_type(data); + + if (t == XSTYPE_LIST || t == XSTYPE_DICT) { + xs_json_dump_value(data, 0, indent, f); + return 1; + } + + return 0; +} + + xs_str *xs_json_dumps(const xs_val *data, int indent) /* dumps data as a JSON string */ { @@ -173,20 +188,6 @@ xs_str *xs_json_dumps(const xs_val *data, int indent) } -int xs_json_dump(const xs_val *data, int indent, FILE *f) -/* dumps data into a file as JSON */ -{ - xstype t = xs_type(data); - - if (t == XSTYPE_LIST || t == XSTYPE_DICT) { - _xs_json_dump(data, 0, indent, f); - return 1; - } - - return 0; -} - - /** JSON loads **/ typedef enum { @@ -370,6 +371,8 @@ int xs_json_load_array_iter(FILE *f, xs_val **value, xstype *pt, int *c) else return -1; } + else + *pt = xs_type(*value); *c = *c + 1; @@ -466,6 +469,8 @@ int xs_json_load_object_iter(FILE *f, xs_str **key, xs_val **value, xstype *pt, else return -1; } + else + *pt = xs_type(*value); *c = *c + 1; diff --git a/xs_version.h b/xs_version.h index 74f453f..09b1bdc 100644 --- a/xs_version.h +++ b/xs_version.h @@ -1 +1 @@ -/* 851c21892c8df1d8f05ae95eaa4a5913e852653b 2025-06-21T17:58:11+02:00 */ +/* a32c0d513ae24ad28ffc5c6c2c1cde75bb758e09 2025-06-23T17:43:10+02:00 */ -- cgit v1.2.3