Reputation: 466
I’m trying to extract values from a JSON, but I can only seem to retrieve the first one, how do I get (a) all three together, (b) just one of them and (c) set up a loop to do something with each one.
FYI - I’m using the module ‘dkjson’
Here is the code.
local json = require "dkjson"
local result = [[{
"eventEnd":1411581600,
"eventStart":1411578000,
"eventParameter":"",
"eventName":"TEST 1"
},
{
"eventEnd":1411585200,
"eventStart":1411581600,
"eventParameter":"",
"eventName":"TEST 2"
},
{
"eventEnd":1411585299,
"eventStart":1411581699,
"eventParameter":"",
"eventName":"TEST 3"}
]]
local LogVariables = json.decode(result)
print(LogVariables.eventEnd) -- prints just the first one 1411581600
And I have another JSON too where I’m unable to extract specifics -
local json = require "dkjson"
local j = [[
{"501":"34.1 °C flow","502":"0 % Power","503":"24 °C Shaft","504":"0 kW Power","505":"18.2 kg Hopper","506":"0 Lx Light",
"507":"Error no pellets ","508":"16/01-2018 12:22:30","521":"0 °C Return","522":"0 liter/hour Flow","524":"0 °C External temperature",
"525":"54 °C Temperature DHW","526":"15.7 % Actual oxygen","527":"0 % Target oxygen","528":"850 Gram auger/6 min","530":"10.115 kg Today",
"531":"0 kg/m2 Today","532":"0 °C Smoke temp.","533":"65 °C Target boiler temp.","534":"56 °C Target DHW temp.","542":" ","584":"Nitra ",
"585":"86 % humidity","586":"1005 hPa pressure","587":"6.2 m/s wind speed","588":"http://openweathermap.org/img/w/13d.png ",
"589":"-2 °C air temperature","591":"130 null","592":"0.0 °C T5","alarm":"1"}
]]
local data = json.decode(j)
print(data) -- returns a table --
-- print(data.531) -- returns error ')' expected near '.531'
-- print(data.[531]) -- returns error '' expected near '['
-- print(data.'531') -- returns error '' expected near ''531''
Upvotes: 0
Views: 455
Reputation: 4564
Your JSON is, in fact, three JSONs separated by a comma. You need to enclose it in another pair of brackets to make it a valid JSON:
local json = require "dkjson"
local result = [[ [{
"eventEnd":1411581600,
"eventStart":1411578000,
"eventParameter":"",
"eventName":"TEST 1"
},
{
"eventEnd":1411585200,
"eventStart":1411581600,
"eventParameter":"",
"eventName":"TEST 2"
},
{
"eventEnd":1411585299,
"eventStart":1411581699,
"eventParameter":"",
"eventName":"TEST 3"}
] ]]
local LogVariables = json.decode(result)
for _, event in ipairs (LogVariables) do
print (event.eventEnd)
end
Your data
is a table indexed by string representations of numbers: print (data['531'])
will print what you want.
Upvotes: 2