2017-12-15 17:52:13 +01:00

2017-10-16 10:21:44 +02:00
2017-12-15 17:52:13 +01:00
---
2014-07-04 19:11:04 +02:00
2020-04-08 18:23:27 +02:00
[](https://www.ardu-badge.com/ArduinoJson/6.15.1)
2019-01-24 21:02:46 +01:00
[](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/6.x)
[](https://travis-ci.org/bblanchon/ArduinoJson)
2019-09-19 09:28:35 +02:00
[](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened& can=1& q=proj:arduinojson)
2019-01-24 21:02:46 +01:00
[](https://coveralls.io/github/bblanchon/ArduinoJson?branch=6.x)
2019-09-19 09:28:57 +02:00
[](https://github.com/bblanchon/ArduinoJson/stargazers)
2014-07-04 19:11:04 +02:00
2017-12-15 17:52:13 +01:00
ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things).
2014-07-04 19:11:04 +02:00
2017-12-15 17:52:13 +01:00
## Features
2014-07-04 19:11:04 +02:00
2020-03-23 13:39:58 +01:00
* [JSON deserialization ](https://arduinojson.org/v6/api/json/deserializejson/?utm_source=github&utm_medium=readme )
* [Optionally decodes UTF-16 escape sequences to UTF-8 ](https://arduinojson.org/v6/api/config/decode_unicode/?utm_source=github&utm_medium=readme )
* [Optionally stores links to the input buffer (zero-copy) ](https://arduinojson.org/v6/api/json/deserializejson/?utm_source=github&utm_medium=readme )
* [Optionally supports comments in the input ](https://arduinojson.org/v6/api/config/enable_comments/?utm_source=github&utm_medium=readme )
* [Optionally filters the input to keep only desired values ](https://arduinojson.org/v6/api/json/deserializejson/#filtering?utm_source=github&utm_medium=readme )
2020-01-15 18:25:59 +01:00
* Supports single quotes as a string delimiter
* Compatible with NDJSON and JSON Lines
2020-03-23 13:39:58 +01:00
* [JSON serialization ](https://arduinojson.org/v6/api/json/serializejson/?utm_source=github&utm_medium=readme )
* [Can write to a buffer or a stream ](https://arduinojson.org/v6/api/json/serializejson/?utm_source=github&utm_medium=readme )
* [Optionally indents the document (prettified JSON) ](https://arduinojson.org/v6/api/json/serializejsonpretty/?utm_source=github&utm_medium=readme )
* [MessagePack serialization ](https://arduinojson.org/v6/api/msgpack/serializemsgpack/?utm_source=github&utm_medium=readme )
* [MessagePack deserialization ](https://arduinojson.org/v6/api/msgpack/deserializemsgpack/?utm_source=github&utm_medium=readme )
2020-01-15 18:25:59 +01:00
* Efficient
2020-03-23 13:39:58 +01:00
* [Twice smaller than the "official" Arduino_JSON library ](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/?utm_source=github&utm_medium=readme )
* [Almost 10% faster than the "official" Arduino_JSON library ](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/?utm_source=github&utm_medium=readme )
* [Consumes roughly 10% less RAM than the "official" Arduino_JSON library ](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/?utm_source=github&utm_medium=readme )
* [Fixed memory allocation, no heap fragmentation ](https://arduinojson.org/v6/api/jsondocument/?utm_source=github&utm_medium=readme )
* [Optionally works without heap memory (zero malloc) ](https://arduinojson.org/v6/api/staticjsondocument/?utm_source=github&utm_medium=readme )
2020-01-15 18:25:59 +01:00
* Versatile
2020-03-23 13:39:58 +01:00
* [Supports custom allocators (to use external RAM chip, for example) ](https://arduinojson.org/v6/how-to/use-external-ram-on-esp32/?utm_source=github&utm_medium=readme )
* Supports [Arduino's `String` ](https://arduinojson.org/v6/api/config/enable_arduino_string/ ) and [STL's `std::string` ](https://arduinojson.org/v6/api/config/enable_std_string/?utm_source=github&utm_medium=readme )
* Supports Arduino's `Stream` and [STL's `std::istream`/`std::ostream` ](https://arduinojson.org/v6/api/config/enable_std_stream/?utm_source=github&utm_medium=readme )
* [Supports Flash strings ](https://arduinojson.org/v6/api/config/enable_progmem/?utm_source=github&utm_medium=readme )
* Supports [custom readers ](https://arduinojson.org/v6/api/json/deserializejson/#custom-reader ) and [custom writers ](https://arduinojson.org/v6/api/json/serializejson/#custom-writer?utm_source=github&utm_medium=readme )
2020-01-15 18:25:59 +01:00
* Portable
* Usable on any C++ project (not limited to Arduino)
* Compatible with C++98
* Zero warnings with `-Wall -Wextra -pedantic` and `/W4`
* [Header-only library ](https://en.wikipedia.org/wiki/Header-only )
* Works with virtually any board
* Arduino boards: [Uno ](https://amzn.to/38aL2ik ), [Due ](https://amzn.to/36YkWi2 ), [Micro ](https://amzn.to/35WkdwG ), [Nano ](https://amzn.to/2QTvwRX ), [Mega ](https://amzn.to/36XWhuf ), [Yun ](https://amzn.to/30odURc ), [Leonardo ](https://amzn.to/36XWjlR )...
* Espressif chips: [ESP8266 ](https://amzn.to/36YluV8 ), [ESP32 ](https://amzn.to/2G4pRCB )
* Lolin (WeMos) boards: [D1 mini ](https://amzn.to/2QUpz7q ), [D1 Mini Pro ](https://amzn.to/36UsGSs )...
* Teensy boards: [4.0 ](https://amzn.to/30ljXGq ), [3.2 ](https://amzn.to/2FT0EuC ), [2.0 ](https://amzn.to/2QXUMXj )
* Particle boards: [Argon ](https://amzn.to/2FQHa9X ), [Boron ](https://amzn.to/36WgLUd ), [Electron ](https://amzn.to/30vEc4k ), [Photon ](https://amzn.to/387F9Cd )...
* Texas Instruments boards: [MSP430 ](https://amzn.to/30nJWgg )...
* Tested on all major development environments
* [Arduino IDE ](https://www.arduino.cc/en/Main/Software )
* [Atmel Studio ](http://www.atmel.com/microsite/atmel-studio/ )
* [Atollic TrueSTUDIO ](https://atollic.com/truestudio/ )
* [Energia ](http://energia.nu/ )
* [IAR Embedded Workbench ](https://www.iar.com/iar-embedded-workbench/ )
* [Keil uVision ](http://www.keil.com/ )
* [MPLAB X IDE ](http://www.microchip.com/mplab/mplab-x-ide )
* [PlatformIO ](http://platformio.org/ )
* [Sloeber plugin for Eclipse ](https://eclipse.baeyens.it/ )
* [Visual Micro ](http://www.visualmicro.com/ )
* [Visual Studio ](https://www.visualstudio.com/ )
* [Even works with online compilers like wandbox.org ](https://wandbox.org/permlink/t7KP7I6dVuLhqzDl )
* Well designed
* [Elegant API ](http://127.0.0.1:4000/v6/example/ )
* [Thread-safe ](https://en.wikipedia.org/wiki/Thread_safety )
* Self-contained (no external dependency)
* `const` friendly
2020-03-23 13:39:58 +01:00
* [`for` friendly ](https://arduinojson.org/v6/api/jsonobject/begin_end/?utm_source=github&utm_medium=readme )
2020-01-15 18:25:59 +01:00
* [TMP friendly ](https://en.wikipedia.org/wiki/Template_metaprogramming )
2020-03-23 13:39:58 +01:00
* Handles [integer overflows ](https://arduinojson.org/v6/api/jsonvariant/as/#integer-overflows?utm_source=github&utm_medium=readme )
2020-01-15 18:25:59 +01:00
* Well tested
* [Unit test coverage close to 100% ](https://coveralls.io/github/bblanchon/ArduinoJson?branch=6.x )
* Continuously tested on
* [Visual Studio 2010, 2012, 2013, 2015, 2017, 2019 ](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/6.x )
* [GCC 4.4, 4.6, 4.7, 4.8, 4.9, 5, 6, 7, 8 ](https://travis-ci.org/bblanchon/ArduinoJson )
* [Clang 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 6.0, 7, 8 ](https://travis-ci.org/bblanchon/ArduinoJson )
* [Continuously fuzzed with Google OSS Fuzz ](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arduinojson )
* Well documented
2020-03-23 13:39:58 +01:00
* [Tutorials ](https://arduinojson.org/v6/doc/deserialization/?utm_source=github&utm_medium=readme )
* [Examples ](https://arduinojson.org/v6/example/?utm_source=github&utm_medium=readme )
* [How-tos ](https://arduinojson.org/v6/example/?utm_source=github&utm_medium=readme )
* [FAQ ](https://arduinojson.org/v6/faq/?utm_source=github&utm_medium=readme )
* [Book ](https://arduinojson.org/book/?utm_source=github&utm_medium=readme )
2020-01-15 18:25:59 +01:00
* Vibrant user community
* Most popular of all Arduino libraries on [GitHub ](https://github.com/search?o=desc&q=arduino+library&s=stars&type=Repositories ) and [PlatformIO ](https://platformio.org/lib/search )
* [Used in hundreds of projects ](https://www.hackster.io/search?i=projects&q=arduinojson )
* [Responsive support ](https://github.com/bblanchon/ArduinoJson/issues?q=is%3Aissue+is%3Aclosed )
2015-09-29 21:49:19 +02:00
2017-12-15 17:52:13 +01:00
## Quickstart
2014-07-04 19:11:04 +02:00
2017-12-15 17:52:13 +01:00
### Deserialization
Here is a program that parses a JSON document with ArduinoJson.
2015-08-24 18:10:10 +02:00
2015-10-30 22:29:47 +01:00
```c++
char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
2014-07-04 19:11:04 +02:00
2019-01-14 10:32:19 +01:00
DynamicJsonDocument doc(1024);
2018-04-17 21:27:45 +02:00
deserializeJson(doc, json);
2014-07-05 12:53:34 +02:00
2019-03-24 18:21:58 +01:00
const char* sensor = doc["sensor"];
long time = doc["time"];
double latitude = doc["data"][0];
double longitude = doc["data"][1];
2015-10-30 22:29:47 +01:00
```
2014-07-05 12:53:34 +02:00
2018-01-15 10:22:04 +01:00
See the [tutorial on arduinojson.org ](https://arduinojson.org/doc/decoding/?utm_source=github&utm_medium=readme )
2017-01-03 22:03:50 +01:00
2017-12-15 17:52:13 +01:00
### Serialization
2017-05-27 15:31:47 +02:00
2017-12-15 17:52:13 +01:00
Here is a program that generates a JSON document with ArduinoJson:
2015-08-24 18:10:10 +02:00
2015-10-30 22:29:47 +01:00
```c++
2019-01-14 10:32:19 +01:00
DynamicJsonDocument doc(1024);
2018-04-17 21:27:45 +02:00
2019-03-24 18:21:58 +01:00
doc["sensor"] = "gps";
doc["time"] = 1351824120;
2020-04-08 11:16:11 +02:00
doc["data"][0] = 48.756080;
doc["data"][1] = 2.302038;
2014-07-05 12:53:34 +02:00
2018-04-17 21:27:45 +02:00
serializeJson(doc, Serial);
2015-10-30 22:29:47 +01:00
// This prints:
// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}
2015-10-30 23:03:16 +01:00
```
2014-07-05 12:53:34 +02:00
2018-01-15 10:22:04 +01:00
See the [tutorial on arduinojson.org ](https://arduinojson.org/doc/encoding/?utm_source=github&utm_medium=readme )
2015-11-09 22:55:29 +01:00
2020-01-15 18:25:59 +01:00
## Support the project
2014-07-05 16:09:37 +02:00
2018-01-05 09:17:24 +01:00
Do you like this library? Please [star this project on GitHub ](https://github.com/bblanchon/ArduinoJson/stargazers )!
2020-04-08 11:16:11 +02:00
What? You don't like it but you *love* it?
We don't take donations anymore, but [we sell a book ](https://arduinojson.org/book/?utm_source=github&utm_medium=readme ), so you can help and learn at the same time.