# bblanchon/arduinojson

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/bblanchon-arduinojson).**

7,176 stars · 1,166 forks · C++ · MIT

## Links

- GitHub: https://github.com/bblanchon/ArduinoJson
- Homepage: https://arduinojson.org
- awesome-repositories: https://awesome-repositories.com/repository/bblanchon-arduinojson.md

## Topics

`arduino` `arduino-library` `c-plus-plus` `embedded` `esp32` `esp8266` `iot` `json`

## Description

ArduinoJson is a C++ library for parsing and manipulating JSON data and MessagePack binary streams on microcontrollers with limited memory and processing power. It provides the core primitives necessary for embedded data serialization and parsing, enabling devices to exchange structured data over serial or network interfaces.

The library is distinguished by its focus on microcontroller memory management, employing strategies such as pool-based allocation, string deduplication, and non-owning string views to minimize RAM usage. It further optimizes for constrained environments by allowing constant strings to be read directly from program flash memory and providing filter-based deserialization to discard unwanted keys during parsing.

Beyond basic parsing, the project covers a broad range of capabilities including stream-based I/O for handling large documents, binary data exchange via MessagePack, and persistence mechanisms for saving documents to EEPROM or filesystems. It also includes utilities for data extraction with implicit type casting, document construction, and integration with network protocols like HTTP and UDP.

The library supports project management via CMake and provides platform-specific I/O support to integrate with target hardware.

## Tags

### Data & Databases

- [Embedded Serialization Utilities](https://awesome-repositories.com/f/data-databases/data-serialization-libraries/embedded-serialization-utilities.md) — Provides memory-optimized serialization utilities for converting structured data to JSON or MessagePack on embedded systems.
- [Bracket Notation Accessors](https://awesome-repositories.com/f/data-databases/bracket-notation-accessors.md) — Enables retrieval of nested values from parsed JSON documents using array-style bracket syntax. ([source](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/))
- [JSON Serializers](https://awesome-repositories.com/f/data-databases/data-processing-pipelines/data-serialization/json-serializers.md) — Provides utilities to convert structured memory objects into compact JSON strings for transmission or storage. ([source](https://arduinojson.org/v7/api/))
- [Incremental JSON Parsing](https://awesome-repositories.com/f/data-databases/data-processing-pipelines/stream-processing-systems/data-streaming/structured-event-streams/typed-object-parsers/incremental-json-parsing.md) — Reads JSON data incrementally from I/O streams such as serial or network interfaces. ([source](https://arduinojson.org/v7/api/json/deserializejson/))
- [MessagePack Serializers](https://awesome-repositories.com/f/data-databases/high-performance-binary-serialization/messagepack-serializers.md) — Encodes structured documents into compact MessagePack binary streams. ([source](https://arduinojson.org/v7/api/))
- [JSON Array Iteration](https://awesome-repositories.com/f/data-databases/immutable-array-updates/array-element-modifiers/array-element-accessors/json-array-iteration.md) — Allows looping through JSON array elements by holding a reference to the array within the document. ([source](https://arduinojson.org/v7/tutorial/deserialization/))
- [JSON Construction Utilities](https://awesome-repositories.com/f/data-databases/json-construction-utilities.md) — Provides tools for building structured JSON documents in memory to prepare them for serialization. ([source](https://arduinojson.org/v7/doc/serialization/))
- [JSON Object Iteration](https://awesome-repositories.com/f/data-databases/key-value-store-iterators/json-object-iteration.md) — Enumerates all key-value pairs in a JSON object using iterators or loops. ([source](https://arduinojson.org/v7/api/jsonobject/begin_end/))
- [Binary Data Accessors](https://awesome-repositories.com/f/data-databases/binary-data-accessors.md) — Provides direct reading and writing of raw binary data embedded within MessagePack streams. ([source](https://arduinojson.org/v7/api/))
- [Binary Size Calculation](https://awesome-repositories.com/f/data-databases/binary-size-calculation.md) — Determines the serialized byte size of a MessagePack binary without executing the full conversion. ([source](https://arduinojson.org/v7/api/))
- [Custom Type Converters](https://awesome-repositories.com/f/data-databases/custom-type-converters.md) — Allows user-defined C++ types to be serialized and deserialized via custom converters. ([source](https://arduinojson.org/))
- [Cast Range Validations](https://awesome-repositories.com/f/data-databases/custom-type-converters/type-restriction-rules/integer-range-restriction/safe-integer-validations/cast-range-validations.md) — Validates that numeric values fit within the target integer type before performing a cast to prevent overflow. ([source](https://arduinojson.org/))
- [Streaming I/O](https://awesome-repositories.com/f/data-databases/data-i-o/streaming-i-o.md) — Reads and writes JSON data directly to byte stream interfaces like serial ports and files. ([source](https://arduinojson.org/v7/api/config/enable_arduino_stream/))
- [Custom JSON Output Writers](https://awesome-repositories.com/f/data-databases/data-serialization-formats/output-formatting-systems/custom-output-checkers/custom-json-output-writers.md) — Defines a custom output class to control how serialized bytes are written to hardware or buffers. ([source](https://arduinojson.org/v7/api/json/serializejson/))
- [Pre-Measurement Serializations](https://awesome-repositories.com/f/data-databases/data-transformation/payload-serialization/pre-measurement-serializations.md) — Calculates the exact byte length of a JSON string before performing the actual serialization. ([source](https://arduinojson.org/v7/api/))
- [Custom Type Converters](https://awesome-repositories.com/f/data-databases/data-type-managers/dynamic-type-managers/custom-type-serializers/custom-type-converters.md) — ArduinoJson registers serialization and deserialization rules for user-defined or third-party data types. ([source](https://arduinojson.org/v7/how-to/))
- [Deserialization Discarding](https://awesome-repositories.com/f/data-databases/data-validation-libraries/deserialization-discarding.md) — Minimizes memory usage by discarding unwanted JSON keys during the deserialization process.
- [JSON Document Storage](https://awesome-repositories.com/f/data-databases/json-document-storage.md) — Enables the persistence of JSON documents into non-volatile EEPROM memory. ([source](https://arduinojson.org/v7/how-to/))
- [JSON Object Merging](https://awesome-repositories.com/f/data-databases/json-document-stores/json-document-manipulation/json-object-merging.md) — Combines two or more JSON objects into a single document by copying key-value pairs. ([source](https://arduinojson.org/v7/how-to/))
- [Non-Standard Parsers](https://awesome-repositories.com/f/data-databases/json-processing-utilities/non-standard-parsers.md) — Accepts non-standard JSON extensions, including single-quoted strings and comments, during parsing. ([source](https://cdn.jsdelivr.net/gh/bblanchon/arduinojson@7.x/README.md))
- [Memory Footprint Optimizers](https://awesome-repositories.com/f/data-databases/memory-footprint-optimizers.md) — Optimizes the memory footprint of JSON documents by tuning byte sizes for identifiers and string lengths. ([source](https://arduinojson.org/v7/config/))
- [Parsing Exception Handling](https://awesome-repositories.com/f/data-databases/parsing-exception-handling.md) — Detects invalid input or memory exhaustion by checking the return status of parsing functions. ([source](https://arduinojson.org/v7/tutorial/deserialization/))
- [Recursive JSON Search](https://awesome-repositories.com/f/data-databases/recursive-structure-processors/recursive-structure-traversers/iterative-and-recursive-traversals/recursive-json-search.md) — Recursively traverses nested JSON documents to locate specific keys and their associated values. ([source](https://arduinojson.org/v7/how-to/))
- [Local Filesystem Storage](https://awesome-repositories.com/f/data-databases/storage-abstraction/local-filesystem-storage.md) — Allows application settings stored as JSON documents to be persisted on a local filesystem. ([source](https://arduinojson.org/v7/example/))

### Programming Languages & Runtimes

- [JSON Parsing](https://awesome-repositories.com/f/programming-languages-runtimes/json-parsing.md) — Reads JSON strings and converts them into structured data objects for programmatic access on microcontrollers. ([source](https://arduinojson.org/v7/))
- [Flash Memory String Referencing](https://awesome-repositories.com/f/programming-languages-runtimes/dynamic-strings/memory-management/constant-string-referencing/flash-memory-string-referencing.md) — Reads constant strings directly from program flash memory to conserve volatile system RAM.
- [String Deduplication](https://awesome-repositories.com/f/programming-languages-runtimes/dynamic-strings/memory-management/string-storage-strategies/string-deduplication.md) — Reduces RAM consumption by storing only one instance of identical keys or values within a document.
- [Implicit Type Casting](https://awesome-repositories.com/f/programming-languages-runtimes/implicit-type-casting.md) — Automatically converts parsed JSON values to native C++ types without requiring explicit casting. ([source](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/))
- [JSON Key Listing](https://awesome-repositories.com/f/programming-languages-runtimes/object-key-extractors/json-key-listing.md) — Iterates over all keys present in a JSON object and returns them for further processing. ([source](https://arduinojson.org/v7/how-to/))
- [Stream-Based Serialization](https://awesome-repositories.com/f/programming-languages-runtimes/stream-based-serialization.md) — Implements serialization of internal data structures directly to output streams for efficient transmission. ([source](https://arduinojson.org/v7/how-to/))
- [Type Conversion and Casting](https://awesome-repositories.com/f/programming-languages-runtimes/type-conversion-and-casting.md) — Uses C++ templates to automatically map JSON values to native types via implicit or explicit casting.
- [Zero-Copy String Views](https://awesome-repositories.com/f/programming-languages-runtimes/zero-copy-string-views.md) — Utilizes non-owning string views to reference existing buffers and avoid redundant memory allocations.
- [Binary Size Optimizations](https://awesome-repositories.com/f/programming-languages-runtimes/binary-size-optimizations.md) — Reduces the final binary footprint by removing Unicode decoding support at compile time. ([source](https://arduinojson.org/v7/api/config/decode_unicode/))
- [Program Memory String Storage](https://awesome-repositories.com/f/programming-languages-runtimes/dynamic-strings/memory-management/string-storage-strategies/program-memory-string-storage.md) — Reads constant strings directly from program flash memory instead of volatile RAM to conserve space. ([source](https://arduinojson.org/v7/api/config/enable_progmem/))
- [Sequential](https://awesome-repositories.com/f/programming-languages-runtimes/json-parsing/sequential.md) — ArduinoJson reads one complete JSON document at a time from a stream to support line-delimited formats. ([source](https://arduinojson.org/))

### Hardware & IoT

- [Embedded JSON Parsing](https://awesome-repositories.com/f/hardware-iot/embedded-json-parsing.md) — Implements high-efficiency JSON parsing specifically designed for microcontrollers with limited RAM.
- [Embedded Communication Libraries](https://awesome-repositories.com/f/hardware-iot/embedded-communication-libraries.md) — Facilitates the exchange of JSON payloads over HTTP and UDP network protocols in IoT contexts.

### Networking & Communication

- [Binary Data Encoding](https://awesome-repositories.com/f/networking-communication/binary-data-encoding.md) — Supports MessagePack as a compact binary encoding for efficient data exchange in constrained environments.
- [JSON Serialization](https://awesome-repositories.com/f/networking-communication/json-serialization.md) — Converts stored JSON documents into minified or indented strings for output to buffers. ([source](https://arduinojson.org/v7/doc/serialization/))
- [Stream Parsing Utilities](https://awesome-repositories.com/f/networking-communication/stream-parsing-utilities.md) — Processes incoming data chunks from communication streams to reconstruct JSON documents. ([source](https://arduinojson.org/v7/how-to/))

### Operating Systems & Systems Programming

- [Embedded Memory Management](https://awesome-repositories.com/f/operating-systems-systems-programming/kernel-core-internals/process-and-memory-management/memory-management/allocation-strategies/dynamic-memory-allocation/custom-memory-allocators/embedded-memory-management.md) — Controls RAM usage through pool-based allocation, string deduplication, and flash memory storage to fit constrained hardware.
- [Fixed-Pool Allocators](https://awesome-repositories.com/f/operating-systems-systems-programming/kernel-core-internals/process-and-memory-management/memory-management/allocation-strategies/dynamic-memory-allocation/custom-memory-allocators/preallocated-memory-pools/fixed-size-memory-pool-managers/fixed-pool-allocators.md) — Implements a fixed-size memory pool for document storage to avoid dynamic heap fragmentation.
- [Custom Memory Allocators](https://awesome-repositories.com/f/operating-systems-systems-programming/kernel-core-internals/process-and-memory-management/memory-management/allocation-strategies/dynamic-memory-allocation/custom-memory-allocators.md) — Allows users to define custom allocators to manage data placement, such as using external PSRAM. ([source](https://arduinojson.org/))
- [Hardware Integration Streams](https://awesome-repositories.com/f/operating-systems-systems-programming/unified-platform-i-o/hardware-integration-streams.md) — Provides support for environment-specific streams and strings to integrate seamlessly with target hardware. ([source](https://arduinojson.org/v7/config/))

### Part of an Awesome List

- [JSON](https://awesome-repositories.com/f/awesome-lists/devtools/reflection/value-comparison/json.md) — Evaluates equality or order between two JSON variants by analyzing their types. ([source](https://arduinojson.org/news/2020/08/01/version-6-16-0/))

### Content Management & Publishing

- [Parsing Behavior Configurations](https://awesome-repositories.com/f/content-management-publishing/parsing-behavior-configurations.md) — Adjusts the handling of Unicode, comments, and nesting depth to meet application requirements. ([source](https://arduinojson.org/v7/config/))

### Development Tools & Productivity

- [Custom JSON Input Readers](https://awesome-repositories.com/f/development-tools-productivity/custom-file-format-readers/custom-data-readers/custom-json-input-readers.md) — Defines a custom byte-reading interface to ingest JSON data from non-standard input sources. ([source](https://arduinojson.org/v7/api/json/deserializejson/))

### DevOps & Infrastructure

- [Response Body Parsing](https://awesome-repositories.com/f/devops-infrastructure/response-parsing-utilities/response-body-parsing.md) — Converts the raw body of an incoming HTTP response into a structured JSON document. ([source](https://arduinojson.org/v7/example/))

### Scientific & Mathematical Computing

- [C-Array Synchronization](https://awesome-repositories.com/f/scientific-mathematical-computing/array-manipulations/c-array-synchronization.md) — Transfers values between C arrays and JSON arrays in either direction. ([source](https://arduinojson.org/news/2020/08/01/version-6-16-0/))

### Software Engineering & Architecture

- [Extraction Error Handlers](https://awesome-repositories.com/f/software-engineering-architecture/error-handling/extraction-error-handlers.md) — Returns default values when requested fields are missing or have unexpected types to handle extraction failures. ([source](https://arduinojson.org/v7/tutorial/deserialization/))
- [Protocol I/O Decoupling](https://awesome-repositories.com/f/software-engineering-architecture/file-i-o-decoupling-patterns/protocol-i-o-decoupling.md) — Decouples JSON processing from hardware protocols using abstract reader and writer interfaces.
- [JSON Syntax Validators](https://awesome-repositories.com/f/software-engineering-architecture/json-schema-validation/json-syntax-validators.md) — Validates that input strings or streams contain syntactically correct JSON before parsing. ([source](https://arduinojson.org/v7/how-to/))
- [Symmetric Data Models](https://awesome-repositories.com/f/software-engineering-architecture/symmetric-data-models.md) — Uses a shared internal representation to support both JSON and MessagePack binary formats.

### User Interface & Experience

- [Parsing Field Filters](https://awesome-repositories.com/f/user-interface-experience/input-field-enhancements/input-field-clearing/input-field-automators/parsing-field-filters.md) — Discards unwanted keys during parsing to minimize the memory footprint of the resulting document. ([source](https://arduinojson.org/))
