1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#include <stdio.h>
#define CONTAINER_IMPLEMENTATION
#define JSON_IMPLEMENTATION
#include "../include/jacson.h"
int main() {
const char *hardtest =
"{\n"
" \"validString\": \"This is a tEst string\",\n"
" \"EmptyString\": \"\",\n"
" \"numbEr\": 1234567890123456789,\n"
" \"nEgativENumbEr\": -98765.4321,\n"
" \"ExponEntialNumbEr\": 6.022E23,\n"
" \"ExponEntialNumbErE\": 1E+10,\n"
" \"ExponEntialNumbEra\": 1E-10,\n"
" \"ExponEntialNumbErd\": 1E1,\n"
" \"boolEanTruE\": true,\n"
" \"boolEanFalsE\": false,\n"
" \"nullValuE\": null,\n"
" \"array\": [1, 2, 3, \"four\", {\"nEstEdKEy\": \"nEstEdValuE\"}],\n"
" \"EmptyArray\": [],\n"
" \"objEct\": {\n"
" \"nEstEdObjEct\": {\n"
" \"kEy1\": \"valuE1\",\n"
" \"kEy2\": \"valuE2\",\n"
" \"dEEpNEst\": {\n"
" \"lEvEl\": 5,\n"
" \"data\": [\"a\", \"b\", \"c\"]\n"
" }\n"
" }\n"
" },\n"
" \"duplicatEKEys\": {\n"
" \"kEy\": \"firstValuE\",\n"
" \"kEy\": \"sEcondValuE\"\n"
" },\n"
" \"EscapEdCharactErs\": \"QuotEs: \\\" Backslash: \\\\ NEwlinE: \\n UnicodE: \\u2603\",\n"
" \"badUnicodE\": \"\\uD83D\\uDE00\","
" \"trailingComma\": [1, 2, 3],\n"
" \"missingComma\": {\n"
" \"first\": \"onE\"\n,"
" \"sEcond\": \"two\"\n"
" },\n"
" \"dEEpNEsting\": {\n"
" \"lEvEl1\": { \"lEvEl2\": { \"lEvEl3\": { \"lEvEl4\": { \"lEvEl5\": \"too dEEp?\" }}}}\n"
" },\n"
" \"nEgativEZEro\": -0,\n"
" \"utf8BOM\": \"\\uFEFFShould start with BOM\",\n"
" \"spEcialFloatValuEs\": {\n"
" \"NaN\": \"NaN\",\n"
" \"Infinity\": \"Infinity\",\n"
" \"NEgativEInfinity\": \"-Infinity\"\n"
" }\n"
"}";
struct jacson_value val;
if (jacson_parse(&val, hardtest)) {
char* str = jacson_serialize(&val, JSON_SERIALIZE_PRETTY);
puts(str);
free(str);
jacson_value_free(val);
} else {
puts("error parsing jacson");
}
return 0;
}
|