【Arduino】Arduino環境下でJSONをパース(逆シリアル化)して値を取り出してみる

Arduino

Jsonフォーマットをパースして文字列を取り出す

(注意)本記事ではArduinoJson 6.15.1を取り扱っています。バージョン外の場合動作しない場合がありますのでご了承ください。

こんにちは、くろべこです。

先日、HttpClientのGETリクエストでJSONフォーマットデータを取り出しましたが、このままではArduinoで特定の値として取り出すことが出来ません。

【Arduino/ESP8266】HttpClientを使ってHTTPSをGETする
前回に引き続きHttpClient記事になります。今回はHTTPSのウェブページにアクセスしてデータをGETしていくのですが、基本的な作法はHTTPと変わりません。変わるのがフィンガープリントという認証が必要なってくるんですね。本記事では認証の方法解説と実際のコードを交えて説明していきたいと思います。

そこで今回は、<ArduinoJson.h>というヘッダファイルを使用してJsonデータから特定の文字列を取り出していきたいと思います。

Jsonデータから特定の文字列を取り出すことが出来れば、ウェブページにアクセスして外部表示機に値を表示したり出来そうですね。


Jsonデータをパースするには

今回パースを行うにあたり題材とするJsonデータは【COVID-19 Japan Web API】の北海道のデータを使用します。

リンク:https://documenter.getpostman.com/view/9215231/SzYaWe6h?version=latest

このJsonデータをどのようにパースするかというと、、、実はArduinoJSONには素晴らしいツールがありまして、まずは以下の【ArduinoJson Assistant】にアクセスしてみてください。

リンク:ArduinoJson Assistant

このツールではJsonドキュメントのメモリとJsonフォーマットから文字列への変換プログラムを提供してくれます。

ということで、先ほどのJsonファイルをArduinoJson AssistantのINPUTにコピペしてみましょう。

メモリーサイズが181byteと計算されましたね。

変換プログラムも構築してくれました。これでほぼほぼ、プログラムは完成されたといっても過言ではありません。では、実際にArduinoコードを見てみましょう。

<<シリアルモニタ>>

という事で、あっさりJSONフォーマットから特定の文字列を抜き取るわけが出来ました。

どのように変換しているかというとdeserializeJsonという関数を使用してJSONフォーマットを逆シリアル化(デコード)してあげるんですね。戻り値としては逆シリアル化のエラー(DeserializationError)を返します。

そして、switch case文でエラーコードに対して分岐させてステータスをシリアル表示させています。変換が成功すれば上記のシリアルモニタ画像にもある様に【Deserialization succeeded】と表示されます。

この関数たちは最新バージョンのV6から導入された関数なので、V6以前のバージョンの場合は使うことが出来ないのでご注意ください。

Jsonの逆シリアル化関数の詳細説明は以下の公式リンクに書かれています。

そして、逆シリアル化されたデータ(ここではdoc)から特定の値を取り出します。

今回のコードでは【北海道】【188】【8】を取り出します。そのために、オブジェクトからメンバを抜き取るような処理を行う事で特定の値を取り出すことが出来ます(C++の構文ですかね?)。

という事で、Jsonを逆シリアル化して値を取り出す記事でした!

 

コメント

タイトルとURLをコピーしました