[Arduino] JSON library 3.0
Only two weeks after version 2.0, I’m releasing a new major revision of Arduino JSON library.
In case you don’t know it already, it’s a free JSON library for embedded systems with the following features:
- Elegant API, very easy to use
- Fixed memory allocation (no malloc)
- Small footprint
EDIT: you should directly jump to version 5.0
What’s new in 3.0?
- New API for the JSON parser (see below)
- Renamed
JsonHashTable
intoJsonObject
- Added iterators for
JsonArray
andJsonObject
A new API for the parser
This is the major change in this revision: an extremely intuitive API for the JSON parser.
Let’s see an example. Here is a snippet written for version 2.0:
JsonHashTable root = parser.parseHashTable(json);
char* sensor = root.getString("sensor");
long time = root.getLong("time");
double latitude = root.getArray("data").getDouble(0);
double longitude = root.getArray("data").getDouble(1);
And now, here is the same code written for version 3.0:
JsonObject root = parser.parse(json);
char* sensor = root["sensor"];
long time = root["time"];
double latitude = root["data"][0];
double longitude = root["data"][1];
As you can see, you can extract the JSON data in a much more intuitive way.
How does it work?
The principles of this new API are:
- Almost every function returns a
JsonValue
operator[]
is directly available inJsonValue
- You can cast a
JsonValue
to - a
double
- a
long
- a
boolean
- a
char*
- a
JsonArray
- a
JsonObject
JsonArray
andJsonObject
provide advanced features, like iterators
Can I still use the old API?
I don’t see any reason to stick with the old API. However, I’ll maintain the compatibility within all the 3.X revisions. In other words, I plan to remove the old API in version 4.0. That way, you should be able to update your code progressively.
When you use the old API, you get a few compilation warnings saying that some feature is deprecated.
I don’t recommend this, but if you want to disable those warnings, just add the following line above the #include
:
#define ARDUINO_JSON_NO_DEPRECATION_WARNING