aboutsummaryrefslogtreecommitdiff
path: root/xs_json.h
diff options
context:
space:
mode:
authorgrunfink <grunfink@comam.es>2025-06-24 12:59:02 +0200
committergrunfink <grunfink@comam.es>2025-06-24 12:59:02 +0200
commit238c5c5f3918f4c64df2364b7c25eb82fd8f16d2 (patch)
tree018a43020a5cdcd09be19a3d27e1ab61abbe612b /xs_json.h
parentf7d398ef07314d4547c48bdfe6f889535e6a6bcc (diff)
Some JSON code tweaks.
Diffstat (limited to 'xs_json.h')
-rw-r--r--xs_json.h39
1 files changed, 22 insertions, 17 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;