Lua从JSON生成的表访问索引

时间:2019-03-16 15:21:13

标签: json lua decode lua-table opencomputers

因此,我必须使用Lua从Openweathermap API获取天气数据。 我设法发送了一个http请求以返回并存储所有数据,但是现在我陷入了Lua表的束缚,我不知道该如何使用。我对Lua并不陌生,在Lua中如此深的嵌套表方面我找不到任何指南或类似内容。

尤其是我只对main中的temp感兴趣。以下是来自API的示例响应:Sample request response

对Lua表格式化程序的依赖是Lua的socket.http和this json。 这是我的基本代码结构

json = require ("json")
web = require ("socket.http")

local get = json.decode(web.request(<API Link>))

“获取”现在存储了一个我不知道如何使用的表

4 个答案:

答案 0 :(得分:1)

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数组的方式。

答案 1 :(得分:0)

该示例响应似乎包含许多带有false的子表。试试这个:true

答案 2 :(得分:0)

如果您不知道如何使用Lua表,则可能应该学习Lua的基本知识。请参阅https://www.lua.org/start.html

json字符串使用其所有键和值对Lua表进行编码。

您可以阅读编码器如何编码表,也可以只编码自己的表并分析结果json字符串。

main

[1,2,3]

get.list[1].main.temp

{“ 3”:“测试”,“ b”:[1,2],“ a”:1}

以此类推...

总是有表键和值,用冒号分隔。 值可以是数字,字符串,表格... 如果表中只有数字键从一个开始,则该值是括号中这些值的列表。如果表中的键不同,则将其封装在大括号中...

因此,让我们看一下您的结果。我将删除40个条目中的39个以缩短它。我还将缩略以使该结构更具可读性。

print(json.encode({1,2,3}))

答案 3 :(得分:0)

2天后,我终于找到了错误。我当时在一个名为OpenComputers的Minecraft Mod中使用Lua。似乎该mod使用了自己的socket.http版本,每次我想打印响应时,它都会返回两个用于请求的函数。我发现,如果在变量后加上“()”,它将返回的响应作为字符串返回,并且可以使用JSON库将其解码为可用的表。

旁注:我可以这样访问天气:json_table [“ weather”] [“ temp”]

该mod在http请求上的文档很少,因此我不得不通过myslef来解决。谢谢您的回复,最后错误总是出乎意料!