Logic Machine Forum
api, nesting too deep - Printable Version

+- Logic Machine 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 log

Part 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 deep



RE: 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)
end



RE: api, nesting too deep - Dré - 31.10.2022

Thanks again, it is working