Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Corona SDK JSON使用_Json_File Io_Lua_Coronasdk - Fatal编程技术网

Corona SDK JSON使用

Corona SDK JSON使用,json,file-io,lua,coronasdk,Json,File Io,Lua,Coronasdk,我有一个正在运行的JSON库,用于加载一个tile ID数组。当我直接从文件资源管理器双击main.lua时,它运行得很好,但当我打开Corona Simulator并从那里打开我的项目或构建我的项目并在测试设备上运行它时,当我尝试使用加载的数据时,它会给我一个空引用错误 下面是从JSON文件加载表的函数: function fileIO.loadJSONFile (fileName) local path = fileName local contents = "" l

我有一个正在运行的JSON库,用于加载一个tile ID数组。当我直接从文件资源管理器双击main.lua时,它运行得很好,但当我打开Corona Simulator并从那里打开我的项目或构建我的项目并在测试设备上运行它时,当我尝试使用加载的数据时,它会给我一个空引用错误

下面是从JSON文件加载表的函数:

function fileIO.loadJSONFile (fileName)
    local path = fileName
    local contents = ""
    local loadingTable = {}
    local file = io.open (path, "r")
    print (file)
    if file then
        local contents = file:read ("*a")
        loadingTable = json.decode (contents)
        io.close (file)

        return loadingTable
    end

    return nil
end
用法如下:

function wr:renderChunkFile (path)
    local data = fileIO.loadJSONFile (path)

    self:renderChunk (data)
end

function wr:renderChunk (data)
    local a, b = 1

    if (self.img ~= nil) then
        a = #self.img + 1
        self.img[a] = {}
    else
        self.img[1] = {}
    end

    if (self.chunks ~= nil) then
        b = #self.chunks + 1
        self.chunks[b] = display.newGroup ()
    else
        self.chunks[1] = display.newGroup ()
    end

    for i = 1, #data do  -- Y axis                       ERROR IS HERE
        self.img[a][i] = {}
        for j = 1, #data[i] do  -- Z axis
            self.img[a][i][j] = {}
            for k = 1, #data[i][j] do  -- X axis
                if (data[i + 1] ~= nil) then
                    if (data[i + 1][j][k] < self.transparentLimit) then
                        self.img[a][i][j][k] = display.newImage ("images/tiles/"..data[i][j][k]..".png", k*self.tileWidth, display.contentHeight -j*self.tileDepth - i*self.tileThickness)
                        self.chunks[b]:insert (self.img[a][i][j][k])

                    elseif(data[i + 1] == nil) then
                        self.img[a][i][j][k] = display.newImage ("images/tiles/"..data[i][j][k]..".png", k*self.tileWidth, display.contentHeight -j*self.tileDepth - i*self.tileThickness)
                        self.chunks[b]:insert (self.img[a][i][j][k])
                    end
                end
            end
        end
    end
end
当它到达i=1的行时,data do告诉我它试图访问nil字段的长度。我哪里出了问题


编辑:我觉得有必要更清楚地解释我的问题是什么。我从这个项目中得到了不一致的结果。当我在文件资源管理器中选择main.lua并用Corona Simulator打开它时,它工作了。当我打开Corona模拟器并在内部导航到main.lua时,它不工作。当我构建项目并在我的设备上测试它时,它不起作用。我真正需要的是深入了解Corona的JSON库和APK内部目录结构要求目录嵌套限制、命名限制等。。如果有人想到其他可能导致我的问题,请提出来!我对任何事情都持开放态度。

如果看不到整个错误信息,也不知道path的价值是什么,那么很难推测。但Corona SDK使用四个基本目录:

system.ResourceDirectory-与main.lua相同的文件夹,并且是只读的 system.Documents目录-数据所在的可写文件夹 system.CachesDirectory-用于下载的文件 system.Temporary目录-用于临时文件

在模拟器中,最后三个在项目的沙盒主文件夹中。在设备上,知道文件夹实际位置的用户


在您的情况下,如果您的JSON文件将包含在可下载的应用程序中,则您的.JSON文件应与main.lua或子文件夹位于同一文件夹中,并在system.ResourceDirectory中引用

你看到这就是错误所在了吗?如果是这样的话,可能只是文件的路径错误,所以它找不到它。要查看io.open中的错误,请尝试使用print将其包装,如本页顶部的示例所示:抱歉!那些打印语句来自调试!我已经把它们移走了。你的建议是一个很好的想法,但错误实际上来自我在文章末尾提到的那句话。我的道路是正确的;我已经检查了好几次,当我直接从文件资源管理器打开main.lua时,整个过程都正常工作。我已经标记了错误现在发生在代码中的点。是的,但是该行的数据是零,这是它被引用的第一个位置。所以,我希望io.open失败,导致fileIO.loadJSONFile返回nil。另一个选项是JSON无效,JSON.decode返回nil。我希望它能这么简单:P不幸的是,我肯定我的JSON文件是有效的;它至少在一种情况下有效,因此必须有另一个问题。我又更新了我的帖子;希望这将澄清这里实际发生的事情。