ESP32 MicroPython návod: Zpracování JSONu
- December 30 2018
- ESP32, ESP8266, NodeMCU , Wemos, RTLDuino...
- 1376x Přečteno
Cílem tohoto návodu pro MicroPython je vysvětlit, jak syntakticky analyzovat (převádět) JSON řetězce s MicroPythonem, který běží na ESP32.
Všechny články o MicroPython a ESP32/ESP8266 najdete na https://chiptron.cz/articles.php?cat_id=23
1. Úvod
Pokud potřebujete pomoc s nastavením MicroPythonu na ESP32, prosím koukněte na tento předchozí článek pro podrobný návod. Návod také vysvětluje, jak se dá připojit k příkazovému řádku v ESP32.
Abychom mohli převádět JSON řetězec, použijeme MicroPython uJSON knihovnu. Můžete také zkontrolovat dokumentaci knihovny na Githubu.
Jelikož použijeme příkazový řádek pro testování kódu, budeme potřebovat nástroj, který nám pomůže komprimovat JSON obsah v jednotlivých řádcích. Poté ho můžeme jen jednoduše vložit. Na to použijeme tyto stránky, které mohou přijmout JSON řetězec a komprimují ho na jednotlivé řádky. Následně to můžeme vložit do Putty tím, že zkopírujeme JSON a klikneme pravým tlačítkem na terminálové okno.
Samotný Kód
Po připojení na Python příkazový řádek, jsme připraveni začít s psaním kódu. Nejprve musíme importovat uJSON modul. Potom jen napíšeme následující výraz a stiskneme enter.
import ujson
Poté bychom měli mít přístup na objekt ujson, který obsahuje metodu zvanou loads. Tato metoda přijímá jako vstup JSON řetězec a vrací objekt odpovídající syntaktické analýze JSON. Začneme s jednoduchou JSON strukturou, která je zobrazena níže.
{
"name":"John"
},
Po komprimaci do jednoho řádku, dostaneme následující JSON řetězec.
{"name":"John"}
Předáme řetězec jako vstup do dříve zmíněné metody loads. Uzavřeme řetěz do 3 uvozovek ““'z každé strany. Uložíme objekt do proměnné nazvané parsed.
parsed = ujson.loads(“““{“name“:“John“}““““)
Nyní potvrdíme, že máme obsah ujson správně v našem návratovém objektu. Zkusíme si objekt vypsat. Navíc vypíšeme na obrazovku datový typ objektu s typem funkce.
print (parsed)
print (type(parsed))
Po spuštění celého kódu, bychom měli dostat výstup podobný tomu na obrázku 1. Všimněte si, že typ našeho objektu s analyzovaným obsahem je knihovna Pythonu, která je perfektní pro přístup k obsahu přístupem klíč-hodnota.
Obrázek 1 – Zpracování JSONu
Teď máme přístup k hodnotě v klíči, která odpovídá „name“. Mělo by nám to vrátit hodnotu „John“. Abychom mohli mít přístup k hodnotě pro tento klíč v knihovně, pošleme příkaz uvedený níže. Všimněte si, že je to jako když chcete přístup na hodnotu v matici, ale místo používání indexu, používáme klíč, ve formátu řetězce.
print(parsed["name"])
Měli byste vidět výstup podobný tomu na obrázku 2. Všimněte si, že se jméno „John'vypíše do konzole.
Obrázek 2 – Přístup k převedeným hodnotám objektu knihovny.
Pro zakončení našeho příkladu si ukážeme složitější strukturu, jak je zobrazeno níže. To může reprezentovat například zprávu, poslanou na IoT zařízení.
{
"device":"temperature",
"id":543,
"values":[1,2,3]
}
Po komprimaci dostaneme následující:
{"device":"temperature","id":543,"values":[1,2,3]}
Teď to převedeme a vypíšeme všechny existující klíče v naší JSON struktuře. Také si vypíšeme typ položky “values”, abychom pochopili, jak je to mapované překladačem.
parsed = ujson.loads("""{"device":"temperature","id":543,"values":[1,2,3]}""")
print (parsed["device"])
print (parsed["id"])
print (parsed["values"])
print(type(parsed["values"]))
Měli byste dosáhnout podobného výsledku jako je vidět na obrázku 3. Jak lze vidět, všechny hodnoty každého klíče jsou vytisknuté správně. V případě klíče “values”, je struktura uvnitř knihovny seznam, spíš než řetězcová reprezentace hodnot. Jedná se o lepší typ, protože následně můžeme operovat s hodnotami všech funkcí dostupných v seznamu, což usnadňuje manipulaci s nimi.
Obrázek 3 – Výsledky JSON převedení obsahu.
Originální článek je dostupný zde.