From a13b9e8bdc4743d171a6df54005d20f82824a6f9 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 10 Apr 2018 17:55:51 +0200 Subject: [PATCH] Added example `MsgPackParser.ino` (issue #358) --- CHANGELOG.md | 1 + .../JsonParserExample/JsonParserExample.ino | 2 +- examples/MsgPackParser/MsgPackParser.ino | 87 +++++++++++++++++++ 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 examples/MsgPackParser/MsgPackParser.ino diff --git a/CHANGELOG.md b/CHANGELOG.md index 0783de86..e4de8075 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ HEAD * Added `serializeJson()` and `serializeJsonPretty()` * Added `measureJson()` and `measureJsonPretty()` * Added `deserializeMsgPack()` (issue #358) +* Added example `MsgPackParser.ino` (issue #358) * Removed `JsonBuffer::parseArray()`, `parseObject()` and `parse()` * Removed `JsonBuffer::createArray()` and `createObject()` * Removed `printTo()` and `prettyPrintTo()` diff --git a/examples/JsonParserExample/JsonParserExample.ino b/examples/JsonParserExample/JsonParserExample.ino index 1f9cb306..72bc6e85 100644 --- a/examples/JsonParserExample/JsonParserExample.ino +++ b/examples/JsonParserExample/JsonParserExample.ino @@ -40,7 +40,7 @@ void setup() { // Test if parsing succeeds. if (error) { - Serial.println("parseObject() failed"); + Serial.println("deserializeJson() failed"); return; } diff --git a/examples/MsgPackParser/MsgPackParser.ino b/examples/MsgPackParser/MsgPackParser.ino new file mode 100644 index 00000000..deb2d546 --- /dev/null +++ b/examples/MsgPackParser/MsgPackParser.ino @@ -0,0 +1,87 @@ +// ArduinoJson - arduinojson.org +// Copyright Benoit Blanchon 2014-2018 +// MIT License +// +// This example shows how to deserialize a MessagePack document with +// ArduinoJson. + +#include + +void setup() { + // Initialize serial port + Serial.begin(9600); + while (!Serial) continue; + + // Root JSON object + // + // Inside the brackets, 200 is the size of the memory pool in bytes. + // Don't forget to change this value to match your JSON document. + // Use arduinojson.org/assistant to compute the capacity. + StaticJsonObject<200> root; + + // StaticJsonObject allocates memory on the stack, it can be + // replaced by DynamicJsonObject which allocates in the heap. + // + // DynamicJsonObject root(200); + + // MessagePack input string. + // + // It's better to use a char[] as shown here. + // If you use a const char* or a String, ArduinoJson will + // have to make a copy of the input in the JsonBuffer. + uint8_t input[] = {131, 166, 115, 101, 110, 115, 111, 114, 163, 103, 112, 115, + 164, 116, 105, 109, 101, 206, 80, 147, 50, 248, 164, 100, + 97, 116, 97, 146, 203, 64, 72, 96, 199, 58, 188, 148, + 112, 203, 64, 2, 106, 146, 230, 33, 49, 169}; + // This MessagePack document contains: + // { + // "sensor": "gps", + // "time": 1351824120, + // "data": [48.75608, 2.302038] + // } + + // Root of the object tree. + // + // It's a reference to the JsonObject, the actual bytes are inside the + // JsonBuffer with all the other nodes of the object tree. + // Memory is freed when jsonBuffer goes out of scope. + MsgPackError error = deserializeMsgPack(root, input); + + // Test if parsing succeeds. + if (error) { + Serial.println("deserializeMsgPack() failed"); + return; + } + + // Fetch values. + // + // Most of the time, you can rely on the implicit casts. + // In other case, you can do root["time"].as(); + const char* sensor = root["sensor"]; + long time = root["time"]; + double latitude = root["data"][0]; + double longitude = root["data"][1]; + + // Print values. + Serial.println(sensor); + Serial.println(time); + Serial.println(latitude, 6); + Serial.println(longitude, 6); +} + +void loop() { + // not used in this example +} + +// See also +// -------- +// +// The website arduinojson.org contains the documentation for all the functions +// used above. It also includes an FAQ that will help you solve any +// deserialization problem. +// Please check it out at: https://arduinojson.org/ +// +// The book "Mastering ArduinoJson" contains a tutorial on deserialization. +// It begins with a simple example, like the one above, and then adds more +// features like deserializing directly from a file or an HTTP request. +// Please check it out at: https://arduinojson.org/book/