JSON je univerzálny formát dát využívaný v rôznych systémoch pre výmenu dát, stavov. Formát je nezávislý na použitej platforme a je veľmi populárny aj v mikrokontrolérovej technike. JSON dáta sú reprezentované poľom dát, kedy má každá položka priradený kľúč, ktorý danú položku reprezentuje a jej hodnotu.
Hodnota môže nadobúdať číselnú hodnotu, textovú hodnotu, ale aj bool hodnoty - true / false / NULL. Formát dát má svoje špecifiká, napríklad čiarky medzi dvojicami kľúčov a hodnôt. Obsah JSON reťazca je čitateľný aj pre človeka a tak vie určiť aj o aké dáta sa jedná, nakoľko kľúč je v podstate jednoznačným identifikátorom dát.
Osobne JSON používam ja vo svojich projektoch pre formát vstupných dát pre Google Charts - grafické vizualizácie čiarovými / koláčovými grafmi. Dáta sú získané z databázy a následne sú enkódované do JSON formátu, ktorý Google Charts spracuje a na os x - čas doplní časovú značku záznamov z databázy a na os y grafu vloží konkrétne dáta namerané v danej časovej značke.
Pri spracovaní JSON dát na strane mikrokontroléru sa využíva proces deserializácie, ktorá umožňuje ľahšie spracovanie dát z reťazca, ktorý je deserializáciou pretvorený na JSON objekt. Práve toto umožňuje knižnica ArduinoJson, ktorá je kompatibilná pre rôzne architektúry procesorov, napríklad AVR - Arduino, Xtensa - ESP8266, ESP32. Umožňuje z deserializovaného JSON objektu vytiahnuť hodnotu na základe kľúča.
Používam to predovšetkým v prípade, že potrebujem načítať rôzne stavy, hodnoty z webservera, ktorý riadi automatizáciu. S týmito dátami môžem ďalej pracovať napríklad v prípade, že vypadne konektivita do internetu, alebo je webserver, ktorý logikou riadi celý projekt nedostupný. Za normálnych okolností s úspešným pripojením na webserver si klient preberie hodnotu kľúča output a tú nastaví na výstup, ostatné parametre síce uloží, ale nepracuje s nimi. Dáta ale môžu byť využité aj do rôznych iných systémov, ktoré podporujú spracovanie JSON dát.
Napríklad Hassio, Domoticz umožňujú vo svojich dashboardoch spracovať JSON zo zdroja a tieto dáta vizualizovať. Tak je možné nezávisle na konfigurácii projektu reportovať jeho stavy do centrálnej aplikácie používateľovi, ktorý má prehľad v dashboard rozhraní o všetkých dostupných projektoch inteligentnej domácnosti a dátach z nich. ArduinoJson podporuje aj vytváranie JSON reťazca, upravovanie existujúcich hodnôt ku kľúčom, ale aj serializáciu, čím je možné JSON objekt previesť opäť na reťazec, ktorý je možné preniesť do ďalšieho zdroja.
Príbuzný, však dátovo náročnejší univerzálny formát reprezentácie dát je XML, čo je rozšírený značkovací jazyk. Štruktúrou veľmi podobnou HTML kódu umožňuje zasielať rôzne stavy, hodnoty druhému systému. V mojich projektoch som to využil napríklad pri internej komunikácii v LAN sieti medzi x zariadeniami v klientskom režime a jedným serverom bežiacim na Arduine. Dáta boli preposielané HTTP POST metódou s takýmto XML payloadom.
Takto bolo možné prenášať napríklad identifikátor tvorený fyzikou MAC adresou mikrokontrolérov a hodnotami zo senzora Bosch BME280. Dáta tak bolo možné webserver spracovať od mnohých klientov siete - Publisherov, ktorí informáciu so svojim indentifikátorom zasielali.
Webserver udržiaval dané dáta v RAM pamäti a dokázal ich klientom, ktorí si informáciu vyžiadali distribuovať prostredníctvom odpovede - response webservera. Výhoda XML je oproti JSON-u aj to, že umožňuje nastaviť znakovú sadu podľa potreby aplikácie / lokalizácie.
Príklad deserializácie a práca s reťazcom v ArduinoJson 6.1: https://arduinojson.org/v6/example/string/