![]() |
|
api, nesting too deep - Printable Version +- LogicMachine Forum (https://forum.logicmachine.net) +-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1) +--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8) +--- Thread: api, nesting too deep (/showthread.php?tid=4334) |
api, nesting too deep - Dré - 30.10.2022 I was trying to make a script, but with reading this data i got the message 'nesting too deep' (below script). Can i do anything to read also that part of the API? Code: require('json')
require('socket.http')
require("ltn12")
socket.http.TIMEOUT = 800
local data,_, code, headers, status, ret
local response = {}
_, code, headers, status = socket.http.request{
url='https://ergast.com/api/f1/current/last/results.json',
sink = ltn12.sink.table(response),
}
ret = table.concat(response)
data = json.pdecode(ret)
if not data then
log('Formule 1: cannot parse data')
return
end
log(data) -- sent data to logPart of the results, some data i got, but deeper data i it dont, as the message shows. Code: ["Results"]
* table:
[1]
* table:
nesting too deep
[2]
* table:
nesting too deep
[3]
* table:
nesting too deepRE: api, nesting too deep - admin - 31.10.2022 Nesting limit is needed to prevent recursive tables. Without this limit such code will cause an infinite loop when logging: Code: t = {}
t.t = t
log(t)You can use an external JSON viewer to find which fields you need from the whole JSON table. Keep in mind that Lua indexing starts from 1 instead of 0. This will log the relevant data: Code: require('json')
require('socket.http')
url = 'https://ergast.com/api/f1/current/last/results.json'
data = socket.http.request(url)
data = json.pdecode(data)
if type(data) == 'table' then
log(data.MRData.RaceTable.Races)
endRE: api, nesting too deep - Dré - 31.10.2022 Thanks again, it is working |