首页 > 解决方案 > 当表确实存在并且具有值时,表 [1] 返回 nil

问题描述

local mapSpawnsData = {}
local JSONData = file.Read(filePath)            -- read file as json text
mapSpawnsData = util.JSONToTable(JSONData)      -- convert JSON to table

print("TABLE:")
PrintTable(mapSpawnsData)
print("TABLE[1]:")
print(tostring(mapSpawnsData[1]))

这是一个名为 garrysmod 的游戏的脚本。PrintTable()是我可以在游戏中调用的函数。

我包含的代码片段返回:(如果我删除了 tosring(),则输出相同)

TABLE:
gm_construct:
            1       =       -1303.524902 167.472397 -44.081600
            2       =       1250.890137 331.746185 -44.081600
            3       =       674.012085 223.775604 -32.148102
TABLE[1]:
nil

我希望能找回“gm_construct”。我在这里想念什么?

标签: arraysindexingluagarrys-modsource-engine

解决方案


您没有注意到的是 PrintTablegm_construct:先打印,然后1 = . 这意味着该表实际上只包含gm_construct一个带有 3 个键的表的键。

为了能够始终正确读取 PrintTable 输出,请查看 ident。1 = 列在右侧一次,这意味着它们是嵌套在您最初打印的表中的某些内容的键。

如果这仍然让您感到困惑,请尝试运行:

for k,v in pairs(mapSpawnsData) do
    print(k, "=", v)
end

这不会打印嵌套内容。

为了使您的代码正常工作mapSpawnsData.gm_construct[1]mapSpawnsData["gm_construct"][1]


推荐阅读