ArduinoJson

Features

Serialize and Deserialize

ArduinoJson supports both JSON serialization and deserialization.

Read JSON:

JsonObject& root = jsonBuffer.parseObject(myInput);

…modify:

root["last_modification"] = time();

…write back:

root.printTo(myOutput)

Fixed Memory Allocation

ArduinoJson uses a fixed memory allocation, allowing to work on devices with very little RAM.

You can choose to store data in the stack:

StaticJsonBuffer<512> jsonBuffer

…or on the heap

DynamicJsonBuffer jsonBuffer(512)

Intuitive Syntax

ArduinoJson has a simple and intuitive syntax to handle object and arrays.

JsonObject& root = jsonBuffer.parseObject(myJson);

const char* city = root["city"];
double temp = root["weather"]["temp"];

Implicit or Explict Casts

ArduinoJson supports two coding styles, with implicit or explicit casts

Implicit cast:

const char* city = root["city"];
float temp = root["temperature"];

Explicit cast:

auto city = root["city"].as<const char*>();
auto temp = root["temperature"].as<float>();

Parse From Stream

ArduinoJson is able to parse directly from an input Stream or std::istream

Parse input from the serial port:

JsonObject& root = jsonBuffer.parse(Serial);

…an Ethernet connection

JsonObject& root = jsonBuffer.parse(ethernetClient);

…or a Wifi connection

JsonObject& root = jsonBuffer.parse(wifiClient);

Compatible with Flash Strings

ArduinoJson works directly with strings stored in program memory (PROGMEM)

You can use a Flash String as JSON input

JsonObject& root = jsonBuffer.parseObject(F("{\"city\":\"Paris\",\"temp\":18.5}"));

…as a value

root["cond"] = F("Sunny");

…or as a key

float temp = root["temp"];

Print to Stream

ArduinoJson is able to print directly to a Print or std::ostream

// Send the JSON to the serial port
root.printTo(Serial);

…an Ethernet connection

root.printTo(ethernetClient);

…or a Wifi connection

root.printTo(wifiClient);

MIT License

ArduinoJson is open-source and uses one of the most permissive licenses so you can use it on any project.

✔️️ Commercial use

✔️️ Modification

✔️️ Distribution

✔️️ Private use

Header-only

ArduinoJson is a header-only library, meaning that all the code is the headers.

This greatly simplifies the compilation as you don’t have to worry about compiling and linking the library.

A single file distribution is also available; that way, you just need to download one header.

Continuous fuzzing

Security is considered very seriously.

That is why ArduinoJson is integrated in Google’s OSS-Fuzz program.

As such, it is continuously fuzzed in search for security vulnerabilities.

Testimonials

I tried aJson and 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. Thanks Benoit for a very well polished product!
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.
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.
This is a great library and I wouldn't be able to do the project I'm doing without it. I completely recommend it.
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.
ArduinoJson library should be used as a benchmark/reference for making libraries. Truly elegant.
its a great lib:) and i use it in everything!
Thanks for your great work on this awesome library, I will definitely keep using it in my projects and recommend to others :)

The most popular library

ArduinoJson is currently the most popular Arduino library on GitHub.

We need your help to stay there, so don't forget to add a star :star:.

Fork me on GitHub