Třeba potřebujete získat data ze zanořeného JSONu, prvky obsahuji náhodné klíče vy potřebujete získat data. Standardní cestou se k nim nedostanete nebo to je moc práce, protože nemůžete zjistit u každého prvku jména všech prvků po cestě k touženému prvku. Typicky tyto prvky naschvál bude náhodné nebo to bude třeba ID prvků, datum. Nebo se vám třeba po kouskách nechce tahat 10 prvků nebo si na ně psát „forEach“ script v GRELu. A nebo se vám prostě nechce psát cesta :D, jste strašně líní a chcete to udělat chytře.
Ve zkratce, kdy použít tento skript?
- Nejde získat cesta k prvků
- Chce jednoduše vytáhnout více prvků.
- Jste líní jako já 😀 a nechce se vám vypisovat celá cesta.
Ukázkový kód JSON:
{"Hlavní element": { // tento hlavní element může být třeba datum, // nebo radom název. jméno domény cokoliv. "Další random název elementu": { // další prvek co se mění. "datax": "text", "subtitletext": "Tento Text chci" // Toto chci získat < příklad č.1 }, "pole": [{ "type": "application/atom+xml", // Toto chci získat < příklad č.2 "href": "URL1" },{ "type": "application/atom+xml", // Toto chci získat < příklad č.2 "href": "URL2" }], } }
Příklad číslo 1
Hledaný element : „subtitletext“
Výsledek: „Tento Text chci“
Příklad číslo 2
Hledaný element : „href“
Výsledek: „URL1;URL2“
Stačí použít následující kód a máte hotovo:
Pro použití toho skriptu je nutné mít upravený OpenRefine podle toho článku ! Jinak vám to nepůjde.
# jython - OpenRefine - MarekLecian.cz # Hledání zanořených prvků v JSON # findkey="title" #Zde zadejte jméno JSON prvku # import json def find_values(id, json_repr): results = [] def _decode_dict(a_dict): try: results.append(a_dict[id]) except KeyError: pass return a_dict json.loads(json_repr, object_hook=_decode_dict) return results return ';'.join(find_values(findkey, value)) # Výstup je spojené pole do stringu oddělené středníkem #return find_values(findkey, value) # Výstup jako pole
Jaký je výstup?
Řetězec a pokud má více výsledku, tak tyto výsledky jsou oddělený středníkem.
Co bude dál?
V dalším díle se podíváme jak si upravit tak OpenRefine, aby jsem si i pod Windows mohli nastavit domovský adresář pro vaše projekty. Typicky pak si nastavíte OpenRefine ukládá projekty do Google drive (dropbox nebo jiné podle chuti) synchronizované složky.