An elegant and efficient JSON library for embedded systems.
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).
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.
For instance, it supports Aduino's String
and Stream
, but also std::string
, std::istream
and std::ostream
.
- JSON decoding (comments are supported)
- JSON encoding (with optional indentation)
- Elegant API, very easy to use
- Fixed memory allocation (zero malloc)
- No data duplication (zero copy)
- Portable (written in C++98)
- Self-contained (no external dependency)
- Small footprint
- Header-only library
- MIT License
- All Arduino boards (Uno, Due, Mini, Micro, Yun...)
- ESP8266
- Teensy
- Intel Edison and Galileo
- PlatformIO
- Energia
- RedBearLab boards (BLE Nano...)
- Computers (Windows, Linux, OSX...)
char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(json);
const char* sensor = root["sensor"];
long time = root["time"];
double latitude = root["data"][0];
double longitude = root["data"][1];
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
root["sensor"] = "gps";
root["time"] = 1351824120;
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
root.printTo(Serial);
// This prints:
// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}
The documentation is available online in the ArduinoJson wiki.
The ArduinoJson Assistant helps you get started with the library.
From Arduino's Forum user jflaplante
:
I tried aJson json-arduino before trying your library. I always ran into memory problem after a while. I have no such problem so far with your library. It is working perfectly with my web services.
From StackOverflow user thegreendroid
:
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.
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!!
This is a great library and I wouldn't be able to do the project I'm doing without it. I completely recommend it.
I am just starting an ESP8266 clock project and now I can output JSON from my server script and interpret it painlessly.
From Twitter user @hemalchevli
:
ArduinoJson library should be used as a benchmark/reference for making libraries. Truly elegant.
its a great lib:) and i use it in everything!
Special thanks to the following persons and companies who made generous donations to the library author:
- Robert Murphy
- Surge Communications
- Alex Scott
- Firepick Services LLC
- A B Doodkorte
- Scott Smith
- Johann Stieger
- Gustavo Donizeti Gini
- Charles-Henri Hallard
- Martijn van den Burg
- Nick Koumaris
- Jon Williams
- Kestutis Liaugminas
- Darlington Adibe
- Yoeri Kroon
- Andrew Melvin
- Doanh Luong
- Christoph Schmidt
- OpenEVSE LLC
- Prokhoryatov Alexey
Found this library useful? Please star this project or help me back with a donation! 😄