The best JSON library for embedded C++.


Intuitive Syntax

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

Fetch data:

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

Set data:

doc["city"] = "Paris";
doc["weather"]["temp"] = 21.2;

Serialize and Deserialize

ArduinoJson supports both JSON serialization and deserialization.

Read JSON:

deserializeJson(doc, myInput);


doc["last_modification"] = time();

…write back:

serializeJson(doc, myOutput);

Input filter

ArduinoJson can filter large inputs to keep only fields that are relevant to your application, thereby saving a lot of memory.

StaticJsonDocument<200> filter;
filter["list"][0]["temperature"] = true;

deserializeJson(doc, input, DeserializationOption::Filter(filter));

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:

StaticJsonDocument<256> doc;

…or on the heap

DynamicJsonDocument doc(2048);

This allocation strategy reduces heap fragmentation.

Parse From Stream

ArduinoJson can parse directly from an input Stream or std::istream

Parse input from the serial port:

deserializeJson(doc, Serial);

…an Ethernet connection

deserializeJson(doc, ethernetClient);

…or a Wifi connection

deserializeJson(doc, wifiClient);

It also supports custom reader types.

Print to Stream

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

Send the JSON to the serial port:

serializeJson(doc, Serial);

…an Ethernet connection

serializeJson(doc, ethernetClient);

…or a Wifi connection

serializeJson(doc, wifiClient);

It also supports custom writer types.

Indented output

ArduinoJson can produce compact:


…or prettified documents:

  "ports": [

Flash Strings

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

You can use a Flash String as JSON input

deserializeJson(doc, F("{\"city\":\"Paris\",\"temp\":18.5}"));

…as a value

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

…or as a key

float temp = doc[F("temp")];

String deduplication

ArduinoJson deduplicates strings in the JSON document.

When you have several identical keys or values, the JsonDocument only stores one of each.

In practice, this feature reduces memory consumption by 20-30%.

See this article for details.

Implicit or Explicit Casts

ArduinoJson supports two coding styles, with implicit or explicit casts

Implicit cast:

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

Explicit cast:

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


ArduinoJson can decode UTF-16 escape sequences to UTF-8.

deserializeJson(doc, "{\"name\":\"Beno\u00EEt");
const char* name = doc["name"]; // <- "Benoît"

Don’t need this feature? Disable it with ARDUINOJSON_DECODE_UNICODE.


ArduinoJson supports comments in the input document.

  /* The WiFi configuration */
  "wifi": {
    "ssid": "The Bat Cave",
    "pass": "imbatman" // <- not secure!!



When parsing a JSON document from an input stream, ArduinoJson stops reading as soon as the document ends (e.g., at the closing brace).

This feature allows to read JSON documents one after the other; for example, it allows to read line-delimited formats like NDJSON or JSON Lines.



Compared to the “official” Arduino_JSON library:

  • ArduinoJson is twice smaller,
  • ArduinoJson runs almost 10% faster,
  • ArduinoJson consumes roughly 10% less RAM.

See in-depth comparison


In addition to JSON, ArduinoJson 6 also supports MessagePack, an alternative serialization format.

MessagePack is like a binary version of JSON. With ArduinoJson 6, you can switch from one format to the other with a single function call!

Thread Safe

ArduinoJson is suitable for multi-threaded applications because it doesn’t use any shared state (no global variable).

As long as you use a different JsonDocument in each thread, there is no risk of race condition.

Overflow Safe

ArduinoJson protects you against integer overflows. Before casting a value to an integer, it checks that the value is in range. If the value doesn’t fit, it returns 0 to prevent overflows.

doc["value"].as<int8_t>();   // 0
doc["value"].as<int16_t>();  // 20000

You can also safely test the type:

doc["value"].is<int8_t>();   // false
doc["value"].is<int16_t>();  // true

Custom allocator

ArduinoJson supports custom allocators, in case you need something special, like using the external PSRAM on your ESP32:

struct SpiRamAllocator {
  void* allocate(size_t size) {
    return heap_caps_malloc(size, MALLOC_CAP_SPIRAM);
  void deallocate(void* pointer) {


ArduinoJson is not limited to Arduino; it works with any C++ project.

Moreover, it’s compatible with C++98, so it doesn’t require a modern C++ compiler, which means you can use it with your old vendor toolchain.

ArduinoJson is continuously tested on:

  • GCC 4.6, 4.7, 4.8, 4.9, 5, 6, 8, and 9
  • Clang 3.5, 3.6, 3.7, 3.8, 3.9, 4, 5, 6, 7, 8, and 9
  • Visual Studio 2010, 2012, 2013, 2015, 2017, and 2019

Self Contained

ArduinoJson is doesn’t depend on any library; in fact, it doesn’t even depend on Arduino!

It means you can use ArduinoJson anywhere you can compile C++ code.

The best example is your test suite: you can comfortably test your program on your computer without touching a microcontroller.

Zero warning

ArduinoJson compiles without any warning, even with the highest compiler settings:

  • -Wall
  • -Wextra
  • -pedantic
  • /W4 on MSVC

Well tested

Because ArduinoJson is developed using TDD, it is thoroughly tested.

Test coverage is above 98%.


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

This dramatically 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.

Try online

You can try ArduinoJson online on


Of all Arduino libraries, ArduinoJson is by far the one with the best documentation.

On this website, you’ll find 468 pages of documentation and 33 news articles. We also provide the ArduinoJson Assistant that generates the code for your project.

Well tested

ArduinoJson is thoroughly tested.

Test coverage is above 98%.

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.

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

Give back!

The library is free; you don’t have to pay anything.

However, if you want to support the development, or just thank the author of the library, you can purchase the book Mastering ArduinoJson.

Not only you’ll encourage the development of the library, but you’ll also learn how to best use the library and probably some C++ too ;-)

They use ArduinoJson

Wifi Controlled Rover

Wifi Controlled Rover

An amazing 3D-printed rover that can be controlled via Wifi.

WiFi Weather Station

WiFi Weather Station

A Wifi weather station, using an ESP32 and a BME280 sensor. It fetches weather forecast from OpenWeatherMap.

ESP32 OpenWeatherMap
Animated truck that shows when a shuttle arrives

Animated truck that shows when a shuttle arrives

The crazy project of an animated truck that shows when a shuttle arrives.

Particle Photon TransLoc API
Social Stats Display

Social Stats Display

A frame with 7-segments displays that shows the number of followers on Twitter, Instagram and Instructables.

Air quality monitor

Air quality monitor

Atmoscan, a multisensor device aimed at monitoring indoor air quality.

Internet clock

Internet clock

AutoClock, a simple internet-enabled clock driven by NTP and GeoIP to give an automatic offset from UTP for your location.

WeMos D1 Mini
IoT Smart Wallet

IoT Smart Wallet

A smart wallet with a screen to monitor cryptocurrency assets.

ESP32 Google Spreadsheet
Smart(er) Underfloor Heating System

Smart(er) Underfloor Heating System

A thermostat that measures temperature and transfers the values to a backend. The backend analyses these values and sends instructions back to the device.

WeMos D1 Mini


A library for M5Stack to package you apps on a SD card and load them from a menu.

e-Paper Weather Display

e-Paper Weather Display

An ESP32 and a 2.9” ePaper Display reads Weather Underground and displays the weather

ESP32 Weather Underground
LAN/Network Monitor

LAN/Network Monitor

An IoT device that monitors all IoT devices

WeMos D1 Mini
Homie for ESP8266

Homie for ESP8266

An Arduino for ESP8266 implementation of Homie, an MQTT convention for the IoT.

3D Printer Monitor for OctoPrint

3D Printer Monitor for OctoPrint

Monitor your 3D Printer’s OctoPrint Server on an OLED display over a wifi connection.

WeMos D1 Mini
Clock News Weather Scrolling Marquee

Clock News Weather Scrolling Marquee

A LED display that shows weather, time, and many other things.

WeMos D1 Mini
Motor on a roller blind

Motor on a roller blind

Adds wifi remote control to roller blinds

WiFi LED Light Strip Controller

WiFi LED Light Strip Controller

A fully-functioning WiFi controller for your LED lights, along with an app for your iOS or Android phone or tablet.

Location Tracker

Location Tracker

A location tracker without a GPS module and without display

NodeMCU Unwired Labs
YouTube Subscriber Counter

YouTube Subscriber Counter

An LCD display that shows the number of subscriber of your YouTube channel

NodeMCU YouTube
Amazon Alexa Smart Home

Amazon Alexa Smart Home

Control things with your voice

NodeMCU Sinric
ISS tracker

ISS tracker

Shows the location of the International Space Station

ESP32 Open Notify
Pool Monitoring

Pool Monitoring

Shows pH, ORP, and temperature of a pool or spa, and uploads the data to

ESP32 ThingsBoard
Facebook Fan Count

Facebook Fan Count

A frame that shows your number of fans on Facebook

NodeMCU Mini Facebook
Arduino MKR1000 - DHT - Artik cloud

Arduino MKR1000 - DHT - Artik cloud

Sending temperature and humidity from Arduino MKR1000 to Artik Cloud

MKR1000 Artik Cloud
AllThingsTalk Maker Platform & NodeMCU

AllThingsTalk Maker Platform & NodeMCU

Getting started project for “AllThingsTalk MAKER”. Client app works on NodeMCU

NodeMCU ATT Maker
IoT JumpWay TTM ESP8266 Arduino Temperature Device

IoT JumpWay TTM ESP8266 Arduino Temperature Device

A temp & humidity sensing device created on an ESP8266 12F that uses the IoT JumpWay for device-to-device communication

ESP8266 IoT JumpWay
Telegram Bot Library

Telegram Bot Library

Host a Telegram Bot on your Arduino and chat with your brand new IoT device!

MKR1000 Telegram


Nick Koumaris

Your library is a life-saver. Thank you for this excellent tool!

Peter Dalmaris

Arduino makers can use ArduinoJson in their projects to connect multiple Arduino gadgets, or Arduinos to their web services. The library includes a powerful parser which can deal with nested objects (great for customising the messaging format to fit with your objectives), it is light on memory (both RAM and flash), and it has a really nice API so it’s easy to use.

Nuno Santos

Thanks for your great work on this awesome library, I will definitely keep using it in my projects and recommend to others :)

AJ Keller

I love ArduinoJson! Keep up the great work!

Hemal Chevli

ArduinoJson library should be used as a benchmark/reference for making libraries. Truly elegant.

Mike Karlesky

You’ve clearly done a tremendous amount of very good work. In fact, the existence of ArduinoJson was a key input into the decision and design process for our system’s architecture a couple years ago.


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.


its a great lib:) and i use it in everything!

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.

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!

Jeff Kletsky

That I can work through use of ArduinoJson without ever touching a MCU is a huge plus! Kudos on what must have been a non-trivial task!

Bon Shaw

Your library has greatly simplified my parsing and will make maintaining my code vastly easier in the future. I’ll certainly be buying your book to shorten my learning curve and begin to take full advantage of your knowledge and library.


It’s a great library and I have found it to be very useful in my Arduino projects. Wanted to test it on Raspberry Pi as well. Included the Headers in my project and it works flawlessly. Keep up the good work!!

Jason Meredith

Thanks again for making such a great library!


ArduinoJson is for me the best json library for microcontrollers! I’m a huge fan of it!

Ewald Comhaire

No other implementation was/is so memory efficient!


Very impressive library, very useful indeed. Thank you!

Thanks for creating this library and supporting material - it’s incredibly well written and useful, and I appreciate it.

My son and I are working on computer game using the Unreal engine, and while the engine has JSON support, their implementation is clunky and slow. I have decided I am going to use ArduinoJSON as my JSON engine in the C++ code for the game. I am also developing a computer system for my 1966 Mustang using an ESP32 board, and I’m going to use AJSON as both the data structure to hold the car’s current status info and to send REST API calls to the Adafruit.IO IOT service. Mostly what I like best is the focus on careful memory usage. Your article about heap fragmentation is very well done, and that is what sold me on using your library.


Thanks for your great work on this library. I experimented with the hornbill library as well, it also works but I prefer yours because you’re using more of the native esp32-arduino libraries, and there’s activity on this library.


I still like ArdunioJson over the alternatives, with the fact that it will never fragment malloc memory being a clear winning advantage. Careful consideration of ArduinoJson’s limitations should allow me to use it for what I want without disadvantage.

Georges Auberger

I recently stumbled onto your library after dealing with JSON on my Particle projects. Fantastic job!

Thanks very much for the lib: I have been trying to squeeze an ethernet data collector onto a nano, and I was really struggling with memory. Your implementation of json seems magic in its memory useage! What makes it stand out is the simplicity of use, and the excellent documentation.

Yann Büchau

Keep up the good work with ArduinoJson! It is an awesome library and a kind of ”beacon” for me, really. The documentation, the website in general and your book is exemplary, I love it! I also provide and maintain several open source software projects (mostly Python packages or SailfishOS apps) and try to document them as good as possible, I know how time-consuming and hard it can be.

Davide Perini

Arduino would not be that good without your lib.

Fantastic library. I use it not only for embedded software but also for server stuff.

Sri Krishna Chaitanya Narumanchi

ArduinoJSON does bring the best features of many such json libraries into one umbrella. Thank you for an awesome library!! :-)

Thank you again for your marvellous library which due to your book is probably one of the best documented libraries that exist. Please continue this excellent service that you provide to so many by your strive to improve this library still further and by keeping it up to date.

The most popular library

ArduinoJson is currently the most popular Arduino library on GitHub and PlatformIO.

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