Page 1 of 1

usng string function to extract values

Posted: 28 May 2014 23:13
by vfn
I did this once before, but now I can't remember how I did it.... :oops:

I get a string of data via http request. It looks like this:

{"temp":79.00,"tmode":2,"fmode":0,"override":1,"hold":0,"t_cool":76.00,"tstate":2,"fstate":1,"time":{"day":2,"hour":9,"minute":35},"t_type_post":0}

(it's from the thermostats in my house)

I can get the data and save it to a file or variable no problem.

I want to extract the numeric value that follows temp and t_cool and write them to a variable to be used in the next step.

I know I can do it with "substring" but I just can't get the syntax right.

Please help.

Thanks in advance.

Re: usng string function to extract values

Posted: 29 May 2014 15:30
by Martin
Hi,

Following script should work (please note the single quotes around the strings). This script assumes that the value is stored in variable s.

Code: Select all

start = indexOf(s, '"temp":')+7;
end = indexOf(s, ',', start);
v = substring(s, start, end);
The first line searches the index of the text "temp": and adds 7 characters to skip the "temp":.
The second line searches for the first comma after start.
The third line extracts the value 79.00 from the original string.

This page contains some scripting examples: Script examples (see example Extract the contents of an HTML element)

You could also use the unofficial JSON to XML converter and extract the values using Xpath:

Code: Select all

xml = convertJSONtoXML('{"root":'+s+"}");
temp = evaluateXPathAsString(xml, "//temp");
t_cool = evaluateXPathAsString(xml, "//t_cool");
The first line in the script also needs to add a fake root element so that the created XML is valid.

Regards,
Martin

Re: usng string function to extract values

Posted: 29 May 2014 19:51
by vfn
Martin,

I used your first method. It's so simple I'm ashamed I couldn't get it right without help.

Thank you very much

Re: usng string function to extract values

Posted: 30 May 2014 08:24
by Martin
No problem, glad I could help.

Re: usng string function to extract values

Posted: 29 Sep 2019 22:46
by Rhor
Just wanted to jump in to thank Martin. Your solution worked. 2 days trying to find a workable script finally came to an end.

Re: usng string function to extract values

Posted: 01 Oct 2019 17:22
by Desmanto
Rhor wrote:
29 Sep 2019 22:46
Just wanted to jump in to thank Martin. Your solution worked. 2 days trying to find a workable script finally came to an end.
Although you might have solved it, but the solution is from old version. Now we have fromJSON() function already, and you should use that to be more efficient.

Code: Select all

response = '{"temp":79.00,"tmode":2,"fmode":0,"override":1,"hold":0,"t_cool":76.00,"tstate":2,"fstate":1,"time":{"day":2,"hour":9,"minute":35},"t_type_post":0}';

js = fromJSON(response);

temp = js["temp"];
t_cool = js["t_cool"];
Accessing the temp and t_cool is much easier, simply point to the key of the converted json. Use Condition debug dialog after the script to check the result.