Sdílejte chiptron.cz na sociálních sítích



RSS feeds

ESP32 MicroPython návod: Zpracování JSONuTisk

Níže uvedený článek je článek přeložený ze stránek dfrobot.com.

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.

Upozornění

Administrátor těchto stránek ani autor článků neručí za správnost a funkčnost zde uvedených materiálů.
Administrátor těchto stránek se zříká jakékoli odpovědnosti za případné ublížení na zdraví či poškození nebo zničení majetku v důsledku elektrického proudu, chybnosti schémat nebo i teoretické výuky. Je zakázané používat zařízení, která jsou v rozporu s právními předpisy ČR či EU.
Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva.
Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ.
10,893,891 návštěv