Funkcije za raščlambu
Funkcije za raščlambu u skripti TapHome — PARSETEXT za tekst između uzoraka, PARSEJSON s JSONPath i PARSEXML s XPath — za čitanje vrijednosti iz odgovora uređaja.
Funkcije za raščlambu čitaju vrijednosti iz teksta koji vraća uređaj — obično odgovora na HTTP zahtjev ili primljene poruke u skripti Packet parsera. Prihvaćaju string, zbirku bajtova (collection<uint8>) ili blob, rade u svakoj skripti i zahtijevaju Core 2022.2 ili noviji.
PARSETEXT
PARSETEXT vraća dio teksta koji slijedi iza lijevog uzorka i završava prije desnog uzorka; kada je taj dio broj, vraća se broj.
| |
| Naziv | Tip | Opis |
|---|---|---|
source | string, collection<uint8> ili blob | Tekst koji se pretražuje. Bajtovi se čitaju kao iso-8859-1. |
leftPattern | string | Tekst prije vrijednosti. Više dijelova odvojenih s ... traži se jedan za drugim. |
rightPattern | string, neobavezno | Tekst iza vrijednosti. Bez njega vrijednost završava na prvom znaku koji nije slovo, znamenka ili . (vodeći + ili - se zadržava). |
Vraća — broj kada se pronađeni tekst čita kao broj (s decimalnom točkom), inače tekst bez razmaka na rubovima. Null kada lijevi uzorak nije pronađen.
Kada je lijevi uzorak pronađen, a desni nije, skripta se zaustavlja pogreškom Specified argument was out of the range of valid values. — ne vraća
Null. Kada desni uzorak može nedostajati, najprije ga provjerite funkcijomINDEXOF(provjereno na Core 2026.1).
Primjer
PARSETEXT("Lorem ipsum dolor sit amet", "ipsum", "amet");
# Result: "dolor sit"
PARSETEXT("<temp>12.2</temp>", "<temp>", "</temp>");
# Result: 12.2
PARSETEXT("<temp>12.2</temp>", "<temp>");
# Result: 12.2
PARSETEXT("status:ok,error:none", "status:");
# Result: "ok"
PARSETEXT("Lorem ipsum dolor sit amet", "ipsum...sit");
# Result: "amet"
PARSETEXT("Lorem ipsum dolor sit amet consectetur adipiscing", "ipsum...sit", "adipiscing");
# Result: "amet consectetur"
PARSETEXT("a=1", "b=");
# Result: NullPrimjer — desni uzorak koji može nedostajati
VAR start := INDEXOF(text, "temp=");
IF start < 0 OR INDEXOF(COPY(text, start), ";") < 0
RETURN(NaN);
END
PARSETEXT(text, "temp=", ";");PARSEJSON
PARSEJSON čita vrijednost iz JSON-a izrazom JSONPath; s TRUE kao trećim argumentom vraća Null umjesto da zaustavi skriptu kada putanja nije pronađena.
| |
| Naziv | Tip | Opis |
|---|---|---|
json | string, collection<uint8> ili blob | Tekst JSON. |
path | string | JSONPath. Početni $. nije obavezan. |
ignoreError | bool, neobavezno | TRUE (ili 1): vraća Null kada putanja nije pronađena, JSON nije valjan ili je json Null. Zadano FALSE. |
Vraća — vrijednost na putanji: string, broj ili bool. Više podudaranja vraća se kao zbirka. Objekt ili polje vraća se kao njegov tekst JSON, koji se može ponovno raščlaniti.
| Putanja | Odabire |
|---|---|
temperature, cloud.connected | Polje, ugniježđeno polje. |
$.devices[0].name | Polje prvog elementa polja. |
$.devices[-1:].deviceId | Posljednji element polja. |
$[?(@.period == 1)].price | Elemente čije polje zadovoljava uvjet. |
Primjer — kada json sadrži:
| |
PARSEJSON(json, "firstName");
# Result: "John"
PARSEJSON(json, "address.city");
# Result: "Nara"
PARSEJSON(json, "age");
# Result: 26
PARSEJSON(json, "address.country", TRUE);
# Result: NullPARSEJSON(json, "address.country") bez trećeg argumenta zaustavlja skriptu pogreškom PARSEJSON - Element not found: ‘address.country’.
Primjer — petlja kroz JSON polje
S TRUE funkcija PARSEJSON nakon posljednjeg elementa vraća Null, čime petlja završava:
VAR i := 0;
VAR names := "";
VAR name := PARSEJSON(json, "$.devices[0].name", TRUE);
WHILE !ISNULL(name)
names := names + name + "\n";
i := i + 1;
name := PARSEJSON(json, "$.devices[" + TOSTRING(i) + "].name", TRUE);
LOOP
names;Pogreške — PARSEJSON - Element not found: ‘path’; PARSEJSON - parse error: … (nevaljan JSON); PARSEJSON - argument 1 is null.
PARSEXML
PARSEXML čita vrijednost iz XML-a izrazom XPath i vraća vrijednost prvog odgovarajućeg čvora.
| |
Vraća — vrijednost prvog čvora: broj kada se tekst čita kao broj, inače string; Null kada ništa ne odgovara. Funkcije XPath vraćaju vlastiti rezultat, na primjer broj iz count().
Napomene
- Brojevi u tekstu čvora čitaju se prema jezičnim postavkama centralne jedinice. Da biste broj s decimalnom točkom pročitali neovisno o njima, putanju omotajte funkcijom XPath
number(). - Imenski prostori deklarirani u dokumentu registriraju se automatski. Imenski prostor s prefiksom (
xmlns:dc="…") koristi se sa svojim prefiksom; zadani imenski prostor (xmlns="…") dobiva naziv elementa koji ga deklarira — za<DIDL-Lite xmlns="…">napišiteDIDL-Lite:container. - Dokumenti manji od 80 kB i prevedeni izrazi spremaju se u međuspremnik, pa su ponovljeni pozivi nad istim odgovorom jeftini.
Primjer — kada odgovor sadrži:
| |
VAR xml := response.Content;
PARSEXML(xml, "//book[2]/title");
# Result: "Midnight Rain"
PARSEXML(xml, "//book[1]/@id");
# Result: "bk101"
PARSEXML(xml, "number(//catalog/book[1]/price)");
# Result: 44.95
PARSEXML(xml, "count(//book)");
# Result: 2
PARSEXML(xml, "//catalog/magazine[1]/price");
# Result: NullPrimjer — XML s imenskim prostorima
VAR xml := response.Content;
PARSEXML(xml, "//DIDL-Lite:container[dc:title='My Playlist']/DIDL-Lite:res");Pogreške — PARSEXML - parse error: … (nevaljan XML ili XPath).
Vidi također — SENDHTTPREQUEST, DECODE.