Browse Source

Some JSON code tweaks.

grunfink 1 year ago
parent
commit
238c5c5f39
2 changed files with 23 additions and 18 deletions
  1. 22 17
      xs_json.h
  2. 1 1
      xs_version.h

+ 22 - 17
xs_json.h

@@ -8,6 +8,7 @@
 #define MAX_JSON_DEPTH 32
 #define MAX_JSON_DEPTH 32
 #endif
 #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);
 int xs_json_dump(const xs_val *data, int indent, FILE *f);
 xs_str *xs_json_dumps(const xs_val *data, int indent);
 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 */
 /* dumps partial data as JSON */
 {
 {
     int c = 0;
     int c = 0;
@@ -108,7 +109,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
                 fputc(',', f);
                 fputc(',', f);
 
 
             _xs_json_indent(level + 1, indent, 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++;
             c++;
         }
         }
@@ -135,7 +136,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
             if (indent)
             if (indent)
                 fputc(' ', f);
                 fputc(' ', f);
 
 
-            _xs_json_dump(v, level + 1, indent, f);
+            xs_json_dump_value(v, level + 1, indent, f);
 
 
             c++;
             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)
 xs_str *xs_json_dumps(const xs_val *data, int indent)
 /* dumps data as a JSON string */
 /* 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 **/
 /** JSON loads **/
 
 
 typedef enum {
 typedef enum {
@@ -370,6 +371,8 @@ int xs_json_load_array_iter(FILE *f, xs_val **value, xstype *pt, int *c)
         else
         else
             return -1;
             return -1;
     }
     }
+    else
+        *pt = xs_type(*value);
 
 
     *c = *c + 1;
     *c = *c + 1;
 
 
@@ -466,6 +469,8 @@ int xs_json_load_object_iter(FILE *f, xs_str **key, xs_val **value, xstype *pt,
         else
         else
             return -1;
             return -1;
     }
     }
+    else
+        *pt = xs_type(*value);
 
 
     *c = *c + 1;
     *c = *c + 1;
 
 

+ 1 - 1
xs_version.h

@@ -1 +1 @@
-/* 851c21892c8df1d8f05ae95eaa4a5913e852653b 2025-06-21T17:58:11+02:00 */
+/* a32c0d513ae24ad28ffc5c6c2c1cde75bb758e09 2025-06-23T17:43:10+02:00 */