docs/Writerside/topics/json.h.md

Mon, 24 Mar 2025 20:16:36 +0100

author
Mike Becker <universe@uap-core.de>
date
Mon, 24 Mar 2025 20:16:36 +0100
changeset 1260
56a019cdb055
parent 1258
a12e102ff67f
child 1267
d17eba9fae33
permissions
-rw-r--r--

add documentation for the shift functions

relates to #451

1143
0559812df10c assign proper names to the documentation topics
Mike Becker <universe@uap-core.de>
parents: 1142
diff changeset
1 # JSON
1142
9437530176bc add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
2
1190
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
3 <warning>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
4 New Feature - will be documented soon!
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
5 </warning>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
6
1257
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
7 ## Parser
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
8
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
9 ```C
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
10 #include <cx/json.h>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
11
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
12 void cxJsonInit(CxJson *json, const CxAllocator *allocator);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
13
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
14 void cxJsonReset(CxJson *json);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
15
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
16 int cxJsonFilln(CxJson *json, const char *buf, size_t len);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
17
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
18 int cxJsonFill(CxJson *json, AnyStr str);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
19
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
20 CxJsonStatus cxJsonNext(CxJson *json, CxJsonValue **value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
21
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
22 void cxJsonDestroy(CxJson *json);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
23 ```
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
24
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
25 <warning>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
26 TODO: document
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
27 </warning>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
28
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
29 ### List of Status Codes
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
30
1258
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
31 Below is a full list of status codes for `cxJsonNext()`.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
32
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
33 | Status Code | Meaning |
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
34 |---------------------------------------|---------------------------------------------------------------------------------------------------|
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
35 | CX_JSON_NO_ERROR | A value was successfully parsed. | |
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
36 | CX_JSON_NO_DATA | The input buffer does not contain more data. |
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
37 | CX_JSON_INCOMPLETE_DATA | The input ends unexpectedly. Use `cxJsonFill()` to add more data before retrying. |
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
38 | CX_JSON_NULL_DATA | The input buffer was never initialized. Probably you forgot to call `cxJsonFill()` at least once. |
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
39 | CX_JSON_BUFFER_ALLOC_FAILED | More internal buffer was needed, but could not be allocated. |
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
40 | CX_JSON_VALUE_ALLOC_FAILED | Allocating memory for a json value failed. |
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
41 | CX_JSON_FORMAT_ERROR_NUMBER | A number value is incorrectly formatted. |
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
42 | CX_JSON_FORMAT_ERROR_UNEXPECTED_TOKEN | The tokenizer found something unexpected, i.e. the JSON string contains a syntax error. |
1257
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
43
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
44 ## Access Values
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
45
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
46 ```C
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
47 #include <cx/json.h>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
48
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
49 bool cxJsonIsObject(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
50
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
51 bool cxJsonIsArray(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
52
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
53 bool cxJsonIsString(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
54
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
55 bool cxJsonIsNumber(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
56
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
57 bool cxJsonIsInteger(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
58
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
59 bool cxJsonIsLiteral(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
60
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
61 bool cxJsonIsBool(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
62
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
63 bool cxJsonIsTrue(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
64
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
65 bool cxJsonIsFalse(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
66
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
67 bool cxJsonIsNull(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
68
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
69 char *cxJsonAsString(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
70
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
71 cxstring cxJsonAsCxString(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
72
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
73 cxmutstr cxJsonAsCxMutStr(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
74
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
75 double cxJsonAsDouble(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
76
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
77 int64_t cxJsonAsInteger(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
78
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
79 bool cxJsonAsBool(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
80
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
81 size_t cxJsonArrSize(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
82
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
83 CxJsonValue *cxJsonArrGet(const CxJsonValue *value, size_t index);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
84
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
85 CxJsonValue *cxJsonObjGet(const CxJsonValue *value, AnyStr name);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
86
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
87 CxIterator cxJsonArrIter(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
88
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
89 CxIterator cxJsonObjIter(const CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
90 ```
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
91
1258
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
92 The `cxJsonIsXYZ()` family functions check the type of the specified JSON value.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
93
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
94 The JSON specification only defines numbers, therefore `cxJsonIsNumber()` returns true for both floating point and integer numbers.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
95 On the other hand, `cxJsonIsInteger()` only returns true for integral numbers.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
96
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
97 The function `cxJsonIsBool()` returns true if `cxJsonIsLiteral()` returns true, but `cxJsonIsNull()` does not.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
98
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
99 > Since a literal can be `true`, `false`, or `null`, note carefully that `!cxJsonIsTrue(v)`
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
100 > is in general _not_ equivalent to `cxJsonIsFalse(v)`.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
101 >
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
102 > Additionally, UCX does implement the Javascript concept of a "falsy" value, meaning that
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
103 > `cxJsonIsFalse()` _only_ returns true, if the value is a literal `false`.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
104 >{style="note"}
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
105
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
106 The `cxJsonAsXYZ()` family of functions return the value with its corresponding C type.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
107
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
108 The functions `cxJsonAsInteger()` and `cxJsonAsDouble()` can be used for any number value.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
109 For example, if `cxJsonAsInteger()` is used on a non-integral number, a double-to-int conversion is performed.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
110
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
111 The function `cxJsonArraySize()` returns the number of items in an array value,
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
112 which can be accessed via index with `cxJsonArrGet()` or via an iterator created with `cxJsonArrIter()`.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
113
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
114 The function `cxJsonObjGet()` returns the member in a JSON object associated with the specified `name`.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
115
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
116 > Both `cxJsonArrGet()` and `cxJsonObjGet()` are safe regarding access to non-existing values.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
117 >
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
118 > When `cxJsonArrGet()` is used with an out-of-bounds index, or `cxJsonObjGet()` is used with a non-existent name,
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
119 > they return a JSON value, that returns `false` for any `cxJsonIsXYZ()` function.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
120
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
121 > If you don't have full control over the JSON data, you should always check the datatype of a value first, before accessing it.
a12e102ff67f add status code documentation and documentation for accessing values
Mike Becker <universe@uap-core.de>
parents: 1257
diff changeset
122 >{style="note"}
1257
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
123
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
124 ## Deallocate Memory
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
125
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
126 ```C
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
127 #include <cx/json.h>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
128
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
129 void cxJsonValueFree(CxJsonValue *value);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
130 ```
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
131
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
132 Once a JSON value is not needed anymore, the memory can be deallocated with `cxJsonValueFree()`.
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
133 Nested values are also recursively deallocated.
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
134
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
135 > Make sure that you are not accidentally deallocating values that are still part of an object or array.
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
136 > When deallocating the enclosing object/array, this will lead to a double-free.
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
137 >{style="warning"}
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
138
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
139 ## Create Objects
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
140
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
141 ```C
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
142 #include <cx/json.h>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
143
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
144 CxJsonValue* cxJsonCreateObj(const CxAllocator* allocator);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
145
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
146 CxJsonValue* cxJsonCreateArr(const CxAllocator* allocator);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
147
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
148 CxJsonValue* cxJsonCreateNumber(
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
149 const CxAllocator* allocator, double num);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
150
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
151 CxJsonValue* cxJsonCreateInteger(
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
152 const CxAllocator* allocator, int64_t num);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
153
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
154 CxJsonValue* cxJsonCreateString(const CxAllocator* allocator,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
155 const char *str);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
156
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
157 CxJsonValue* cxJsonCreateCxString(
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
158 const CxAllocator* allocator, cxstring str);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
159
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
160 CxJsonValue* cxJsonCreateLiteral(
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
161 const CxAllocator* allocator, CxJsonLiteral lit);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
162
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
163 int cxJsonArrAddNumbers(CxJsonValue* arr,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
164 const double* num, size_t count);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
165
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
166 int cxJsonArrAddIntegers(CxJsonValue* arr,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
167 const int64_t* num, size_t count);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
168
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
169 int cxJsonArrAddStrings(CxJsonValue* arr,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
170 const char* const* str, size_t count);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
171
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
172 int cxJsonArrAddCxStrings(CxJsonValue* arr,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
173 const cxstring* str, size_t count);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
174
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
175 int cxJsonArrAddLiterals(CxJsonValue* arr,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
176 const CxJsonLiteral* lit, size_t count);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
177
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
178 int cxJsonArrAddValues(CxJsonValue* arr,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
179 CxJsonValue* const* val, size_t count);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
180
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
181 int cxJsonObjPut(CxJsonValue* obj, cxstring name, CxJsonValue* child);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
182
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
183 CxJsonValue* cxJsonObjPutObj(CxJsonValue* obj, cxstring name);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
184
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
185 CxJsonValue* cxJsonObjPutArr(CxJsonValue* obj, cxstring name);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
186
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
187 CxJsonValue* cxJsonObjPutNumber(CxJsonValue* obj,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
188 cxstring name, double num);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
189
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
190 CxJsonValue* cxJsonObjPutInteger(CxJsonValue* obj,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
191 cxstring name, int64_t num);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
192
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
193 CxJsonValue* cxJsonObjPutString(CxJsonValue* obj,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
194 cxstring name, const char* str);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
195
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
196 CxJsonValue* cxJsonObjPutCxString(CxJsonValue* obj,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
197 cxstring name, cxstring str);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
198
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
199 CxJsonValue* cxJsonObjPutLiteral(CxJsonValue* obj,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
200 cxstring name, CxJsonLiteral lit);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
201 ```
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
202
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
203 <warning>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
204 TODO: document
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
205 </warning>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
206
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
207 ## Writer
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
208
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
209 ```C
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
210 #include <cx/json.h>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
211
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
212 typedef struct cx_json_writer_s {
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
213 bool pretty;
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
214 bool sort_members;
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
215 uint8_t frac_max_digits;
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
216 bool indent_space;
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
217 uint8_t indent;
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
218 bool escape_slash;
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
219 } CxJsonWriter;
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
220
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
221 CxJsonWriter cxJsonWriterCompact(void);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
222
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
223 CxJsonWriter cxJsonWriterPretty(bool use_spaces);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
224
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
225 int cxJsonWrite(void* target, const CxJsonValue* value,
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
226 cx_write_func wfunc, const CxJsonWriter* settings);
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
227 ```
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
228
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
229 <warning>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
230 TODO: document
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
231 </warning>
946cadf95ea4 define structure for json.h doc
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
232
1190
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
233 <seealso>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
234 <category ref="apidoc">
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
235 <a href="https://ucx.sourceforge.io/api/json_8h.html">json.h</a>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
236 </category>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
237 </seealso>

mercurial