2017-01-31 10:06:40 +01:00
ArduinoJson - C++ JSON library for IoT
2014-07-04 19:11:04 +02:00
====================
2015-11-25 21:22:49 +01:00
[](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/master) [](https://travis-ci.org/bblanchon/ArduinoJson) [](https://coveralls.io/r/bblanchon/ArduinoJson?branch=master) [](https://github.com/bblanchon/ArduinoJson)
2014-11-15 15:22:37 +01:00
2014-07-19 16:05:42 +02:00
*An elegant and efficient JSON library for embedded systems.*
2014-07-04 19:11:04 +02:00
2017-01-03 22:03:50 +01:00
It's designed to have the most intuitive API, the smallest footprint and is able to work without any allocation on the heap (no malloc).
2014-07-04 19:11:04 +02:00
2014-07-05 12:53:34 +02:00
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.
2017-01-03 22:03:50 +01:00
For instance, it supports Aduino's `String` and `Stream` , but also `std::string` , `std::istream` and `std::ostream` .
2014-07-04 19:11:04 +02:00
2014-07-05 16:09:37 +02:00
Features
--------
2014-07-04 19:11:04 +02:00
2015-08-10 17:22:22 +02:00
* JSON decoding (comments are supported)
2014-11-11 14:26:57 +01:00
* JSON encoding (with optional indentation)
2015-08-24 18:10:10 +02:00
* Elegant API, very easy to use
2016-02-29 09:27:52 +01:00
* Fixed memory allocation (zero malloc)
* No data duplication (zero copy)
2015-05-23 15:32:50 +02:00
* Portable (written in C++98)
* Self-contained (no external dependency)
2014-07-04 19:11:04 +02:00
* Small footprint
2016-06-23 21:27:24 +02:00
* Header-only library
2014-07-04 19:11:04 +02:00
* MIT License
2015-09-29 21:49:19 +02:00
Works on
--------
2016-02-17 10:24:37 +01:00
* All Arduino boards (Uno, Due, Mini, Micro, Yun...)
2015-09-29 21:49:19 +02:00
* ESP8266
* Teensy
2016-06-03 20:16:47 +02:00
* Intel Edison and Galileo
2015-12-23 14:42:22 +01:00
* PlatformIO
* Energia
2016-02-17 10:24:37 +01:00
* RedBearLab boards (BLE Nano...)
2015-09-29 21:49:19 +02:00
* Computers (Windows, Linux, OSX...)
2014-11-11 14:26:57 +01:00
Quick start
-----------
2014-07-04 19:11:04 +02:00
2014-11-11 14:26:57 +01:00
#### Decoding / Parsing
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
2015-10-30 22:29:47 +01:00
StaticJsonBuffer< 200 > jsonBuffer;
2014-07-05 12:53:34 +02:00
2015-10-30 22:29:47 +01:00
JsonObject& root = jsonBuffer.parseObject(json);
2014-07-05 12:53:34 +02:00
2015-10-30 22:29:47 +01:00
const char* sensor = root["sensor"];
long time = root["time"];
double latitude = root["data"][0];
double longitude = root["data"][1];
```
2014-07-05 12:53:34 +02:00
2017-01-03 22:03:50 +01:00
[See JsonParserExample.ino ](examples/JsonParserExample/JsonParserExample.ino )
2014-11-11 14:26:57 +01:00
#### Encoding / Generating
2015-08-24 18:10:10 +02:00
2015-10-30 22:29:47 +01:00
```c++
StaticJsonBuffer< 200 > jsonBuffer;
2014-07-04 19:11:04 +02:00
2015-10-30 22:29:47 +01:00
JsonObject& root = jsonBuffer.createObject();
root["sensor"] = "gps";
root["time"] = 1351824120;
2014-07-05 12:53:34 +02:00
2015-10-30 22:29:47 +01:00
JsonArray& data = root.createNestedArray("data");
data.add(48.756080, 6); // 6 is the number of decimals to print
data.add(2.302038, 6); // if not specified, 2 digits are printed
2014-07-05 12:53:34 +02:00
2015-10-30 22:29:47 +01:00
root.printTo(Serial);
// 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
2017-01-03 22:03:50 +01:00
[See JsonGeneratorExample.ino ](examples/JsonGeneratorExample/JsonGeneratorExample.ino )
2014-11-29 16:59:22 +01:00
Documentation
-------------
2017-03-25 22:05:06 +01:00
The documentation is available online in the [ArduinoJson Website ](https://bblanchon.github.io/ArduinoJson/ ).
2017-01-31 10:06:40 +01:00
The [ArduinoJson Assistant ](https://bblanchon.github.io/ArduinoJson/assistant/ ) helps you get started with the library.
2014-07-04 19:11:04 +02:00
2014-07-05 16:09:37 +02:00
Testimonials
------------
2014-07-04 19:11:04 +02:00
From Arduino's Forum user `jflaplante` :
2015-08-24 18:10:10 +02:00
> I tried aJson json-arduino before trying your library. I always ran into memory problem after a while.
2014-07-04 19:11:04 +02:00
> I have no such problem so far with your library. It is working perfectly with my web services.
From StackOverflow user `thegreendroid` :
2014-07-05 16:09:37 +02:00
> It has a really elegant, simple API and it works like a charm on embedded and Windows/Linux platforms. We recently started using this on an embedded project and I can vouch for its quality.
2014-10-03 10:06:52 +02:00
From GitHub user `zacsketches` :
> Thanks for a great library!!!
> I've been watching you consistently develop this library over the past six months, and I used it today for a publish and subscribe architecture designed to help hobbyists move into more advanced robotics. Your library allowed me to implement remote subscription in order to facilitate multi-processor robots.
> ArduinoJson saved me a week's worth of time!!
2015-09-06 22:11:53 +02:00
[From Reddit user `erm_what_` ](https://www.reddit.com/r/arduino/comments/3jj6ep/announcing_arduinojson_50/cusjk8c ):
> This is a great library and I wouldn't be able to do the project I'm doing without it. I completely recommend it.
[From Reddit user `makerhacks` ](https://www.reddit.com/r/arduino/comments/3jj6ep/announcing_arduinojson_50/cusqg7b ):
> I am just starting an ESP8266 clock project and now I can output JSON from my server script and interpret it painlessly.
2016-04-05 10:27:39 +02:00
[From Twitter user `@hemalchevli` ](https://twitter.com/hemalchevli/status/715788439397011456 ):
> ArduinoJson library should be used as a benchmark/reference for making libraries. Truly elegant.
2016-04-04 22:23:51 +02:00
2016-11-15 21:48:40 +01:00
[From GitHub user `sticilface` ](https://github.com/bblanchon/ArduinoJson/issues/381#issuecomment-260203594 ):
> its a great lib:) and i use it in everything!
2015-11-09 22:55:29 +01:00
Donators
--------
Special thanks to the following persons and companies who made generous donations to the library author:
2016-05-16 20:35:26 +02:00
* Robert Murphy < img alt = 'USA' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width = '18' height = '18' >
* Surge Communications < img alt = 'USA' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width = '18' height = '18' >
* Alex Scott < img alt = 'United Kingdom' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1ec-1f1e7.svg' width = '18' height = '18' >
* Firepick Services LLC < img alt = 'USA' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width = '18' height = '18' >
* A B Doodkorte < img alt = 'Netherlands' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1f1.svg' width = '18' height = '18' >
* Scott Smith < img alt = 'USA' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width = '18' height = '18' >
* Johann Stieger < img alt = 'Austria' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1e6-1f1f9.svg' width = '18' height = '18' >
* Gustavo Donizeti Gini < img alt = 'Brazil' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1e7-1f1f7.svg' width = '18' height = '18' >
* Charles-Henri Hallard < img alt = 'France' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1eb-1f1f7.svg' width = '18' height = '18' >
* Martijn van den Burg < img alt = 'Netherlands' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1f1.svg' width = '18' height = '18' >
2016-05-22 14:58:48 +02:00
* Nick Koumaris < img alt = 'Greece' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1ec-1f1f7.svg' width = '18' height = '18' >
2016-05-23 11:02:19 +02:00
* Jon Williams < img alt = 'USA' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width = '18' height = '18' >
2016-06-03 20:16:47 +02:00
* Kestutis Liaugminas < img alt = 'Lithuania' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f1-1f1f9.svg' width = '18' height = '18' >
2016-08-25 11:40:31 +02:00
* Darlington Adibe < img alt = 'Nigeria' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1ec.svg' width = '18' height = '18' >
2016-10-27 15:19:13 +02:00
* Yoeri Kroon < img alt = 'Netherlands' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1f1.svg' width = '18' height = '18' >
2016-11-15 21:48:40 +01:00
* Andrew Melvin < img alt = 'United Kingdom' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1ec-1f1e7.svg' width = '18' height = '18' >
2016-11-25 18:41:33 +01:00
* Doanh Luong < img alt = 'Vietnam' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fb-1f1f3.svg' width = '18' height = '18' >
2017-02-19 21:01:26 +01:00
* Christoph Schmidt < img alt = 'Germany' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1e9-1f1ea.svg' width = '18' height = '18' >
2017-02-22 18:15:21 +01:00
* OpenEVSE LLC < img alt = 'USA' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width = '18' height = '18' >
2017-02-19 21:01:26 +01:00
* Prokhoryatov Alexey < img alt = 'Russia' src = 'https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f7-1f1fa.svg' width = '18' height = '18' >
2015-11-09 22:55:29 +01:00
2014-11-11 17:50:40 +01:00
---
2014-07-05 16:09:37 +02:00
2015-08-20 15:15:59 +02:00
Found this library useful? Please star this project or [help me back with a donation! ](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=donate%40benoitblanchon%2efr&lc=GB&item_name=Benoit%20Blanchon&item_number=Arduino%20JSON¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted ) :smile: