因此,我一定会使用Lua从Openweathermap API获取天气数据。我设法发送了一个http请求来返回并存储所有数据,但是现在我被一个Lua表卡住了,我不知道如何使用它。我对Lua非常陌生,我没有找到任何关于Lua中这么深的嵌套表的指南或类似的东西。
特别是,我只对main中的temp字段感兴趣。下面是Sample request response接口的响应示例
依赖于Lua的socket.http和this json到Lua表格格式化程序。下面是我的基本代码结构
json = require ("json")
web = require ("socket.http")
local get = json.decode(web.request(<API Link>))
"get“现在存储了一个我不知道如何使用的表
发布于 2019-03-16 23:59:55
两天后,我终于找到了错误。我在一个叫做OpenComputers的“我的世界”模型中工作,它利用了Lua。mod似乎使用了自己的socket.http版本,每次我想打印响应时,它都会返回两个函数供request使用。我发现,如果我在变量后面加上一个"()“,它会以字符串的形式返回响应,并且使用JSON库,我可以将其解码为一个可工作的表。
旁注:我可以像这样访问天气:json_table“天气”
mod在http请求上的文档非常糟糕,所以我不得不通过myslef来解决这个问题。谢谢你的回复,最后这个错误总是出乎意料的!
发布于 2019-03-16 20:29:27
在https://www.json2yaml.com/的帮助下,结构是:
cod: '200'
message: 0.0036
cnt: 40
list:
- dt: 1485799200
main:
temp: 261.45
temp_min: 259.086
temp_max: 261.45
pressure: 1023.48
sea_level: 1045.39
grnd_level: 1023.48
humidity: 79
temp_kf: 2.37
weather:
- id: 800
main: Clear
description: clear sky
icon: 02n
clouds:
all: 8
wind:
speed: 4.77
deg: 232.505
snow: {}
sys:
pod: n
dt_txt: '2017-01-30 18:00:00'
…
- dt: 1486220400
…
city:
id: 524901
name: Moscow
coord:
lat: 55.7522
lon: 37.6156
country: none
所以,
for index, entry in ipairs(get.list) do
print(index, entry.dt, entry.main.temp)
end
ipairs
迭代表中的正整数键,直到但不包括第一个没有值的整数。这似乎就是JSON库表示JSON数组的方式。
发布于 2019-03-16 20:22:14
该示例响应似乎有许多子表,其中包含main
。试试这个:get.list[1].main.temp
。
https://stackoverflow.com/questions/55198358
复制