@@ -5,8 +5,9 @@ An easy to use, very fast JSON parsing implementation written in pure C
55## Features
66
77 * Fully [ RFC-8259] ( https://datatracker.ietf.org/doc/html/rfc8259 ) compliant
8- * Simple 2 file library
8+ * Small 2 file library
99 * Support for all data types
10+ * Simple and efficient hash table implementation to search element by key
1011 * Rust like ` result ` type used throughout fallible calls
1112 * Compile with ` -DJSON_SCRAPE_WHITESPACE ` to parse non-minified JSON with whitespace in between
1213
@@ -46,7 +47,12 @@ result(json_element) // json_element_result_t
4647result (json_element) json_parse(typed(json_string) json_str);
4748```
4849
49- ### Print JSON with specific indentation
50+ ### Find an element by key
51+ ```C
52+ result(json_element) json_object_find(typed(json_object) * object, typed(json_string) key);
53+ ```
54+
55+ ### Print JSON with specified indentation
5056``` C
5157void json_print (typed(json_element) * element, int indent);
5258```
@@ -176,8 +182,18 @@ int main() {
176182
177183 // Extract the data
178184 typed (json_element) element = result_unwrap(json_element)(&element_result);
185+
186+ // Fetch the "hello" key value
187+ result (json_element) hello_element_result = json_object_find(&element, "hello");
188+ if(result_is_err(json_element)(&hello_element_result)) {
189+ typed(json_error) error = result_unwrap_err(json_element)(&hello_element_result);
190+ fprintf(stderr, "Error getting element \" hello\" : %s\n", json_error_to_string(error));
191+ return -1;
192+ }
193+ typed (json_element) hello_element = result_unwrap(json_element)(&hello_element_result);
194+
179195 // Use the element
180- printf("Value is \"%s\"\n", element.value.as_object->entries[1].element .value.as_string);
196+ printf ("\" hello \" : \" %s\" \n", hello_element .value.as_string);
181197 json_print (&element, 2);
182198 json_free (&element);
183199
@@ -187,7 +203,7 @@ int main() {
187203Outputs
188204
189205```
190- Value is "value "
206+ "hello": "world "
191207{
192208 "hello": "world",
193209 "key": "value"
@@ -212,23 +228,23 @@ At each Key-Value pair `typed(json_entry_t)`, there is a member `type`
212228...
213229
214230typed (json_element) element = ...; // See example above
215- typed(json_entry) entry = element-> value.as_object->entries[ 0] ;
231+ typed(json_entry) entry = element. value.as_object->entries[ 0] ;
216232
217- switch(entry.type) {
233+ switch(entry.element. type) {
218234 case JSON_TYPE_STRING:
219- // ` entry.value.as_string ` is a ` json_string_t `
235+ // ` entry.element. value.as_string ` is a ` json_string_t `
220236 break;
221237 case JSON_TYPE_NUMBER:
222- // ` entry.value.as_number ` is a ` json_number_t `
238+ // ` entry.element. value.as_number ` is a ` json_number_t `
223239 break;
224240 case JSON_TYPE_OBJECT:
225- // ` entry.value.as_object ` is a ` json_object_t * `
241+ // ` entry.element. value.as_object ` is a ` json_object_t * `
226242 break;
227243 case JSON_TYPE_ARRAY:
228- // ` entry.value.as_array ` is a ` json_array_t * `
244+ // ` entry.element. value.as_array ` is a ` json_array_t * `
229245 break;
230246 case JSON_TYPE_BOOLEAN:
231- // ` entry.value.as_boolean ` is a ` json_boolean_t `
247+ // ` entry.element. value.as_boolean ` is a ` json_boolean_t `
232248 break;
233249}
234250```
@@ -245,14 +261,14 @@ In each `typed(json_object)`, there is a member `count`
245261int i;
246262
247263typed(json_element) element = ...; // See example above
248- typed(json_object) *obj = element-> value.as_object;
264+ typed(json_object) *obj = element. value.as_object;
249265
250266for(i = 0; i < obj->count; i++) {
251267 typed(json_entry) entry = obj->entries[i];
252268
253269 typed(json_string) key = entry.key;
254- typed(json_element_type) type = entry.type;
255- typed(json_element_value) value = entry.value;
270+ typed(json_element_type) type = entry.element. type;
271+ typed(json_element_value) value = entry.element. value;
256272 // Do something with `key`, `type` and `value`
257273}
258274```
@@ -269,10 +285,10 @@ In each `typed(json_array)`, there is a member `count`
269285int i;
270286
271287typed (json_element) element = ...; // See example above
272- typed(json_array) * arr = element-> value.as_array;
288+ typed(json_array) * arr = element. value.as_array;
273289
274- for(i = 0; i < obj ->count; i++) {
275- typed(json_element) element = obj ->elements[ i] ;
290+ for(i = 0; i < arr ->count; i++) {
291+ typed(json_element) element = arr ->elements[ i] ;
276292
277293 typed(json_element_type) type = element.type;
278294 typed(json_element_value) value = element.value;
0 commit comments