summaryrefslogtreecommitdiff
path: root/xs_json.h
diff options
context:
space:
mode:
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 @@
8#define MAX_JSON_DEPTH 32 8#define MAX_JSON_DEPTH 32
9#endif 9#endif
10 10
11void xs_json_dump_value(const xs_val *data, int level, int indent, FILE *f);
11int xs_json_dump(const xs_val *data, int indent, FILE *f); 12int xs_json_dump(const xs_val *data, int indent, FILE *f);
12xs_str *xs_json_dumps(const xs_val *data, int indent); 13xs_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
80static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f) 81void 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
158int 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
157xs_str *xs_json_dumps(const xs_val *data, int indent) 172xs_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
176int 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
192typedef enum { 193typedef 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