I have bin searching a solution for my question but didn't find a or better said I did not get it with what I found.So lets talk about what my problem is about.I am using a Smart Home Control Software on a Raspberry Pi and as I found out this weekend using pilight-receive I can catch the data from my outdoor temperature sensor. The output of pilight-receive looks like that:{        message: {                id: 4095,                temperature: 409.5        },        origin: receiver,        protocol: alecto_wsd17,        uuid: 0000-b8-27-eb-0f3db7,        repeats: 3}{        message: {                id: 1490,                temperature: 25.1,                humidity: 40.0,                battery: 1        },        origin: receiver,        protocol: alecto_ws1700,        uuid: 0000-b8-27-eb-0f3db7,        repeats: 3}{        message: {                id: 2039,                temperature: 409.5        },        origin: receiver,        protocol: alecto_wsd17,        uuid: 0000-b8-27-eb-0f3db7,        repeats: 4}Now my question to you: How the heck can I extract the temperature and humidity from where the id is 1490. And how would you recommend me to do check this frequently? By a cron job that runs every 10 minutes, creates an output of the pilight-receive, extracts the data of the output and pushes it to the Smart Home Control Api.Someone having an idea - thanks a lot
How to extract data from a JSON file
text processing;json
You can use jq to process json files in shell.For example, I saved your sample json file as raul.json and then ran:$ jq .message.temperature raul.json 409.525.1409.5$ jq .message.humidity raul.json null40nulljq is available pre-packaged for most linux distros.There's probably a way to do it in jq itself, but the simplest way I found to get both the wanted values on one line is to use xargs.  For example:$ jq 'select(.message.id == 1490) | .message.temperature, .message.humidity' raul.json | xargs25.1 40or, if you want to loop through each .message.id instance, we can add .message.id to the output and use xargs -n 3 as we know that there will be three fields (id, temperature, humidity):jq '.message.id, .message.temperature, .message.humidity' raul.json | xargs -n 34095 409.5 null1490 25.1 402039 409.5 nullYou could then post-process that output with awk or whatever.Finally, both python and perl have excellent libraries for parsing and manipulating json data.  As do several other languages, including php and java.