mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	Added README.md
This commit is contained in:
		
							
								
								
									
										167
									
								
								JsonGenerator/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								JsonGenerator/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | ||||
| Arduino JSON library - Generator | ||||
| ================================ | ||||
|  | ||||
| This library is a simple JSON encoder for embedded systems. | ||||
|  | ||||
| It's design to be very lightweight, works without any allocation on the heap (no malloc) and supports nested objects. | ||||
|  | ||||
| It has been written with Arduino in mind, but it isn't linked to Arduino libraries so you can use this library in any other C++ project. | ||||
|  | ||||
|  | ||||
| Features | ||||
| -------- | ||||
|  | ||||
| * Supports nested objects | ||||
| * Elegant API, very easy to use  | ||||
| * Fixed memory allocation (no malloc) | ||||
| * Small footprint | ||||
| * Implements Arduino's Printable interface | ||||
| * MIT License | ||||
|  | ||||
|  | ||||
| Example | ||||
| ------- | ||||
|  | ||||
|     JsonArray<2> array; | ||||
|     array.add(48.756080, 6); | ||||
|     array.add(2.302038, 6); | ||||
|  | ||||
|     JsonHashTable<3> root; | ||||
|     root.add("sensor", "gps"); | ||||
|     root.add("time", 1351824120); | ||||
|     root.add("data", array); | ||||
|  | ||||
|     Serial.print(root); // {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]} | ||||
|  | ||||
|  | ||||
| How to  use? | ||||
| ------------ | ||||
|  | ||||
| ### 1. Install the library | ||||
|  | ||||
| Download the library and extract it to: | ||||
|  | ||||
|     <your Arduino Sketch folder>/libraries/ArduinoJson | ||||
|  | ||||
| ### 2. Import in your sketch | ||||
|  | ||||
| Just add the following lines at the top of your `.ino` file: | ||||
|  | ||||
|     #include <JsonGenerator.h> | ||||
|  | ||||
|     using namespace ArduinoJson::Generator; | ||||
|     | ||||
| ### 3. Create object tree | ||||
|  | ||||
| In order to generate a JSON string, you need to build the equivalent object tree. You usually start by the root which can be either an array or an hash-table. | ||||
|  | ||||
| #### Array | ||||
|  | ||||
| You create an array with the following line: | ||||
|  | ||||
|     JsonArray<8> array; | ||||
|  | ||||
| See the little `<8>`? It's a template parameter that gives the capacity of the array, it's the maximum number of elements you can put in it.  | ||||
|  | ||||
| > ##### About the capacity | ||||
| > As stated in the feature list, this library works with a fixed memory allocation. | ||||
| > This means that the size of the object must be know at the compilation time, therefore you can **not** use a variable to set the capacity of the array. | ||||
|  | ||||
| Then you can add strings, integer, booleans, etc:  | ||||
|  | ||||
|     array.add("bazinga!"); | ||||
|     array.add(42); | ||||
|     array.add(true); | ||||
|  | ||||
| There are two syntaxes for the floating point values: | ||||
|  | ||||
| 	array.add(3.1415, 4);  // 4 digits: "3.1415"  | ||||
|     array.add(3.14);	   // 2 digits: "3.14" | ||||
|  | ||||
| > ##### About floating point precision | ||||
| > The overload of `add()` with 2 parameters allows you to specify the number of decimals to save in the JSON string.  | ||||
| > When you use the overload with one parameter, you use the default number of decimals which is two. | ||||
| > Note that this behavior is the exact same as Arduino's `Print::print(double,int);` which is implemented by `Serial`.  | ||||
| > So you may already be familiar with it.  | ||||
|  | ||||
| Finally you can add nested object to the array: | ||||
|  | ||||
|     JsonArray<8> nestedArray; | ||||
|     array.add(nestedArray); | ||||
|  | ||||
| or | ||||
|  | ||||
|     JsonHashTable<8> nestedHash; | ||||
|     array.add(nestedHash); | ||||
|  | ||||
| #### Hash-table | ||||
|  | ||||
| You create a hash-table with the following line: | ||||
|  | ||||
|     JsonHashTable<8> hash; | ||||
|  | ||||
| Like with the array class, there is a template parameter that gives the capacity of the hash-table. | ||||
|  | ||||
| Then you can add strings, integer, booleans, etc:  | ||||
|  | ||||
|     hash.add("key1", "bazinga!"); | ||||
|     hash.add("key2", 42); | ||||
|     hash.add("key3", true); | ||||
|  | ||||
| As for the arrays, there are two syntaxes for the floating point values: | ||||
|  | ||||
| 	array.add("key4", 3.1415, 4);  // 4 digits: "3.1415"  | ||||
|     array.add("key5", 3.14);	   // 2 digits: "3.14" | ||||
|  | ||||
| Finally you can add nested objects: | ||||
|  | ||||
|     JsonArray<8> nestedArray; | ||||
|     hash.add("key6", nestedArray); | ||||
|  | ||||
| or | ||||
|  | ||||
|     JsonHashTable<8> nestedHash; | ||||
|     hash.add("key7", nestedHash); | ||||
|  | ||||
| ### 4. Get the JSON string | ||||
|  | ||||
| There are two ways tho get the resulting JSON string. | ||||
|  | ||||
| Depending on your project, you may need to dump the string in a classic `char[]` or send it to a stream like `Serial` or `EthernetClient `. | ||||
|  | ||||
| Both ways are the easy way :-) | ||||
|  | ||||
| #### Use a classic `char[]` | ||||
|  | ||||
| Whether you have a `JsonArray` or a `JsonHashTable`, simply call `printTo()` with the destination buffer, like so: | ||||
|  | ||||
| 	char buffer[256]; | ||||
|     array.printTo(buffer, sizeof(buffer)); | ||||
|  | ||||
| #### Send to a stream | ||||
|  | ||||
| It's very likely that the generated JSON will end up in a stream like `Serial` or `EthernetClient `, so you can save some time and memory by doing this: | ||||
|  | ||||
| 	Serial.print(array); | ||||
|  | ||||
| or | ||||
|    | ||||
|     array.printTo(Serial); | ||||
|  | ||||
| > ##### About the Printable interface | ||||
| > `JsonArray` and `JsonHashTable` implement Arduino's `Printable` interface. | ||||
| > This is why you can call `Serial.print()` like in the example above. | ||||
| > You can do the same with any other implementation of `Print`:  `HardwareSerial`,  `SoftwareSerial`, `LiquidCrystal`, `EthernetClient`, `WiFiClient`... | ||||
|     | ||||
|  | ||||
| Memory usage | ||||
| ------------ | ||||
|  | ||||
| Here are the size of the main classes of the library. | ||||
|  | ||||
| This table is for an 8-bit Arduino, types would be bigger on a 32-bit processor. | ||||
|  | ||||
| | Type                   | Size in bytes | | ||||
| | ---------------------- | ------------- | | ||||
| | JsonArray<N>     | 4 + 12 x N    | | ||||
| | JsonHashTable<N> | 4 + 14 x N    | | ||||
		Reference in New Issue
	
	Block a user