AllDecay
@AllDecay
Вечно отдыхающий.

Как работать с объектами JSON в Lua?

Приветствую всех, кто это читает. Возникла необходимость получить данные о погоде и связать их с одной игрой. Написал, пока что, парсер погоды в Москве (выводит текущее состояние и температуру). Собственно, сам код:
json = (loadfile "/opt/test/json.lua")()
http = require("socket.http")

function try(f, catch_f)
  local status, exception = pcall(f)
  if not status then
    catch_f(exception)
  end
end

try(function()
    local res = http.request("http://api.openweathermap.org/data/2.5/weather?id=524901&units=metric&lang=en&APPID=тут api ключ")
    local data = json:decode(res)
    print("conditions:", data['weather'][0]['main'])
    print("temp:", data['main']['temp'])
end, function(e)
    print("Exception (weather):", e)
end)

Сразу же покажу JSON, который получаю:
{"coord":{"lon":37.62,"lat":55.75},
"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],
"base":"stations",
"main":{"temp":26.5,"pressure":1008,"humidity":44,"temp_min":25,"temp_max":27}}

(JSON не весь, а только та часть, с которой работаю.)
Так вот, проблема с этой строчкой print("conditions:", data['weather'][0]['main'])

Отладчик говорит следующее про эту строчку: attempt to index a nil value

Как это исправить? После питона и сишарпа не могу понять, в чем проблема.
  • Вопрос задан
  • 7926 просмотров
Решения вопроса 1
JaxxDexx
@JaxxDexx
В Lua массивы индексируются с 1, а не с 0
print("conditions:", data['weather'][1]['main'])
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Graff46
@Graff46
Программист любитель
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы