diff --git a/README.md b/README.md index 4a078a9..dd7e883 100644 --- a/README.md +++ b/README.md @@ -2,37 +2,37 @@ [![Build Status](https://travis-ci.org/rafagafe/tiny-json.svg?branch=master)](https://travis-ci.org/rafagafe/tiny-json) [![GitHub contributors](https://img.shields.io/github/contributors/rafagafe/tiny-json.svg)](https://github.com/rafagafe/tiny-json/graphs/contributors) -tiny-json is a versatile and easy to use json parser in C suitable for embedded systems. It is fast, robust and portable. +tiny-json is a versatile and easy to use json parser written in C and suitable for embedded systems. It is fast, robust and portable. -It is not only a tokenizer. You can get data in string format or get the primitives values in C type variables without performance loss. +It is not only a tokenizer. You can access json data in string format or get primitive values directly as C type variables without any loss of performance. -You can get the JSON fields one on one. Or get their values by their names. This helps you to save a lot of source code lines and development time. +You can access the JSON fields one on one or get their values by their names. This helps you to save a lot of source code lines and development time. * It does not use recursivity. * It does not use dynamic memory. The memory you use can be reserved statically. -* It has not limits in nested level in arrays or json objects. +* There is no limit for nested levels in arrays or json objects. * The JSON property number limit is determined by the size of a buffer that can be statically reserved. -If you need create JSON strings please visit: https://github.com/rafagafe/json-maker +If you need to create JSON strings please visit: https://github.com/rafagafe/json-maker # Philosophy -When parsing a JSON text string a tree is created by linking json_t structures. Navigating or querying this tree is very easy using the API functions. +When parsing a JSON text string a tree is created by linking json_t structures. Navigating or querying this tree is very easy using the provided API. -To maintain reduced memory usage and fast processing the strings are not copied. When you request the value of a JSON element, a reference is returned within the original string with the JSON. +To maintain reduced memory usage and fast processing the strings are not copied. When you request the value of a JSON element, a reference to the original JSON string is returned. -To facilitate the processing of the data the returned strings are null-terminated strings. This is achieved by setting the null character to JSON control characters such as commas, brackets, braces, and quotation marks. +To facilitate the processing of the data the returned strings are null-terminated. This is achieved by setting the null character to JSON control characters such as commas, brackets, braces, and quotation marks. # API -Two types are defined in tiny-json API. One is jsonType_t. It is an enumeration with the types of JSON fields. And the other is json_t. It is a structure that you don't need know its content. +The tiny-json API provides two types. `jsonType_t` is an enumeration for all possible JSON field types. `json_t` is a structure containing internal data which you don't need to know. ```C typedef enum { JSON_OBJ, JSON_ARRAY, JSON_TEXT, JSON_BOOLEAN, JSON_INTEGER, JSON_REAL, JSON_NULL } jsonType_t; ``` -To parse a JSON string we use the function json_create(). We pass it an array of json_t for it can allocate JSON fields. -If the JSON string is bad format or has more fields than the array it returns a null pointer. +To parse a JSON string use `json_create()`. We pass it an array of `json_t` for it to allocate JSON fields. +If the JSON string is bad formated or has more fields than the array this function returns a null pointer. ```C enum { MAX_FIELDS = 4 }; json_t pool[ MAX_FIELDS ]; @@ -42,19 +42,19 @@ char str[] = "{ \"name\": \"peter\", \"age\": 32 }"; json_t const* parent = json_create( str, pool, MAX_FIELDS ); if ( parent == NULL ) return EXIT_FAILURE; ``` -To get a field by its name we use the function json_getProperty. If the field does not exist it returns a null pointer. -And to get the type of a field we use the function json_getType (). +To get a field by its name we use `json_getProperty()`. If the field does not exist the function returns a null pointer. +To get the type of a field we use `json_getType()`. ```C json_t const* namefield = json_getProperty( parent, "name" ); if ( namefield == NULL ) return EXIT_FAILURE; if ( json_getType( namefield ) != JSON_TEXT ) return EXIT_FAILURE; ``` -To get the value of a filed in string format we use the function json_getValue(). It always returns a valid null-teminated string. +To get the value of a field in string format we use `json_getValue()`. It always returns a valid null-teminated string. ```C char const* namevalue = json_getValue( namefield ); printf( "%s%s%s", "Name: '", namevalue, "'.\n" ); ``` -In primitive type fileds we can use a especific funtion to get its value in a C type like json_getInteger() or still use json_getValue() to get its value in text format. +For primitive fields we can use a specific function to get the fields value directly as a C type, f.i. `json_getInteger()` or we can use `json_getValue()` to get its value in text format. ```C json_t const* agefield = json_getProperty( parent, "age" ); if ( agefield == NULL ) return EXIT_FAILURE; @@ -66,4 +66,4 @@ printf( "%s%lld%s", "Age: '", agevalue, "'.\n" ); char const* agetxt = json_getValue( agefield ); printf( "%s%s%s", "Age: '", agetxt, "'.\n" ); ``` -To see nested JSON objects and arrays please read example-01.c. +For an example how to use nested JSON objects and arrays please see example-01.c.