无法正确地编写/解码JSON文件。代码生成不同的结果。
2014-8-11 13:33:50
收藏:0
阅读:79
评论:1
我在我 Corona 游戏中的 JSON 文件中遇到了问题。基本上,当你达到一定的分数时,游戏会给你奖杯(卡片)。然后,卡片信息会被写入 JSON 文件中。当你开始游戏时,它会检查文件“playerCards.json”是否存在,如果不存在,则创建此文件并具有以下结构:
{"common":[],"uncommon":[],"rare":[]}
稍后在游戏中,玩家最终会收到一张卡片。简化的代码如下:
local category = "common"
local rdm = math.random(1,20)
array = loadFile("playerCards.json")
array[category][rdm] = collection[category][rdm]
writeFile("playerCards.json", array)
集合是一个预加载的 Lua 表结构,如下所示:{"common" = {"001", "002", "003",…,"020"}}。为了问题的简便,我将卡片限制为某个类别(常规)。假设玩家赢得了第3张卡片,所以代码应该这样运行:
array ["common"] [3]=collection ["common"] [3]
结果表数组将是:
array = {"common" = {null, null, "003"}}
当我使用函数 writeFile(“playerCards.json”,array)将上面的表格编码为文件 playerCards.json 时。目前,这段代码运行得很好,生成的 JSON 文件如下所示:
{"common":[null,null,"003"],"uncommon":[],"rare":[]}
问题出现在玩家获得9以上的卡片时,例如15。写入时,JSON 文件变成了这样:
{"common":{"3":"003","15":"015"},"uncommon":[],"rare":[]}
同样的代码如何产生如此不同的结果?你能帮我解决这个问题吗?如果需要,这里是 load 和 write 函数的代码:
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
问题在于 Lua 不区分列表和映射对象(两者都使用表格),而 JSON 区分它们。
这会在序列化为 JSON 时产生歧义;序列化程序必须确定 Lua 表格应该序列化为数组还是对象。大多数序列化程序通过检查表格的键是否大致连续来执行此操作。如果是这样,只有将其序列化为数组。如果您的数组太“稀疏”,例如您的第二个示例,那么序列化程序会认为它是带有数值键的映射。
我不知道 Corona,但我见过一些 Lua JSON 库包括将表格明确标记为数组的方法。或者,您可以使用
false而不是nil来填充数组的空槽作为占位符值。