![ArduinoJson](banner.svg) --- [![arduino-library-badge](https://www.ardu-badge.com/badge/ArduinoJson.svg?version=6.13.0)](https://www.ardu-badge.com/ArduinoJson/6.13.0) [![Build Status](https://ci.appveyor.com/api/projects/status/m7s53wav1l0abssg/branch/6.x?svg=true)](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/6.x) [![Build Status](https://travis-ci.org/bblanchon/ArduinoJson.svg?branch=6.x)](https://travis-ci.org/bblanchon/ArduinoJson) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/arduinojson.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arduinojson) [![Coverage Status](https://coveralls.io/repos/github/bblanchon/ArduinoJson/badge.svg?branch=6.x)](https://coveralls.io/github/bblanchon/ArduinoJson?branch=6.x) [![GitHub stars](https://img.shields.io/github/stars/bblanchon/ArduinoJson?style=flat)](https://github.com/bblanchon/ArduinoJson/stargazers) ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things). ## Features * JSON decoding (comments are supported) * JSON encoding (with optional indentation) * MessagePack * Elegant API, easy to use * Fixed memory allocation (zero malloc) * No data duplication (zero copy) * Portable (written in C++98, can be used in any C++ project) * Self-contained (no external dependency) * Small footprint * Input and output streams * [100% code coverage](https://coveralls.io/github/bblanchon/ArduinoJson) * [Header-only library](https://en.wikipedia.org/wiki/Header-only) * [MIT License](https://en.wikipedia.org/wiki/MIT_License) * [Comprehensive documentation](https://arduinojson.org?utm_source=github&utm_medium=readme) ## Compatibility ArduinoJson works on the following hardware: * Arduino boards: [Uno](https://www.arduino.cc/en/Main/ArduinoBoardUno), [Due](https://www.arduino.cc/en/Main/ArduinoBoardDue), [Mini](https://www.arduino.cc/en/Main/ArduinoBoardMini), [Micro](https://www.arduino.cc/en/Main/ArduinoBoardMicro), [Yun](https://www.arduino.cc/en/Main/ArduinoBoardYun)... * Espressif chips: [ESP8266](https://en.wikipedia.org/wiki/ESP8266), [ESP32](https://en.wikipedia.org/wiki/ESP32) * WeMos boards: [D1](https://wiki.wemos.cc/products:d1:d1), [D1 mini](https://wiki.wemos.cc/products:d1:d1_mini), ... * RedBearLab boards: [BLE Nano](http://redbearlab.com/blenano/), [BLE Mini](http://redbearlab.com/blemini/), [WiFi Micro](https://redbear.cc/product/wifi/wifi-micro.html), [LOLIN32](https://wiki.wemos.cc/products:lolin32:lolin32)... * [Teensy](https://www.pjrc.com/teensy/) boards * Intel boards: Edison, Galileo... * Particle boards: [Photon](https://www.particle.io/products/hardware/photon-wifi-dev-kit), [Electron](https://www.particle.io/products/hardware/electron-cellular-dev-kit)... * Texas Instruments boards: [MSP430](http://www.ti.com/microcontrollers/msp430-ultra-low-power-mcus/overview/overview.html)... ArduinoJson compiles with zero warning on the following compilers, IDEs, and platforms: * [Arduino IDE](https://www.arduino.cc/en/Main/Software) * [PlatformIO](http://platformio.org/) * [Energia](http://energia.nu/) * [Visual Micro](http://www.visualmicro.com/) * [Atmel Studio](http://www.atmel.com/microsite/atmel-studio/) * [IAR Embedded Workbench](https://www.iar.com/iar-embedded-workbench/) * [Atollic TrueSTUDIO](https://atollic.com/truestudio/) * [Keil uVision](http://www.keil.com/) * [MPLAB X IDE](http://www.microchip.com/mplab/mplab-x-ide) * [GCC](https://gcc.gnu.org/) * [Clang](https://clang.llvm.org/) * [Visual Studio](https://www.visualstudio.com/) ## Quickstart ### Deserialization Here is a program that parses a JSON document with ArduinoJson. ```c++ char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; DynamicJsonDocument doc(1024); deserializeJson(doc, json); const char* sensor = doc["sensor"]; long time = doc["time"]; double latitude = doc["data"][0]; double longitude = doc["data"][1]; ``` See the [tutorial on arduinojson.org](https://arduinojson.org/doc/decoding/?utm_source=github&utm_medium=readme) ### Serialization Here is a program that generates a JSON document with ArduinoJson: ```c++ DynamicJsonDocument doc(1024); doc["sensor"] = "gps"; doc["time"] = 1351824120; JsonArray data = doc.createNestedArray("data"); data.add(48.756080); data.add(2.302038); serializeJson(doc, Serial); // This prints: // {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]} ``` See the [tutorial on arduinojson.org](https://arduinojson.org/doc/encoding/?utm_source=github&utm_medium=readme) ## Documentation The documentation is available on [arduinojson.org](https://arduinojson.org/?utm_source=github&utm_medium=readme), here are some shortcuts: * The [Examples](https://arduinojson.org/example/?utm_source=github&utm_medium=readme) show how to use the library in various situations. * The [API Reference](https://arduinojson.org/api/?utm_source=github&utm_medium=readme) contains the description of each class and function. * The [FAQ](https://arduinojson.org/faq/?utm_source=github&utm_medium=readme) has the answer to virtually every question. * The [ArduinoJson Assistant](https://arduinojson.org/assistant/?utm_source=github&utm_medium=readme) writes programs for you! --- Do you like this library? Please [star this project on GitHub](https://github.com/bblanchon/ArduinoJson/stargazers)! 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!