【问题标题】:Adding nil value to lua table将 nil 值添加到 lua 表
【发布时间】:2021-12-16 03:11:23
【问题描述】:

我想通过 c lua 库发送一个 luatable。这适用于值,但在插入零时我遇到了麻烦。插入 nil 会从接收的 JSON 数据中删除数据。

发送值可以正常工作:

lua_pushnumber(&luaState, 2.5);
lua_rawseti(&luaState, -2, 1);

当插入 Nil 而不是数字时,索引和 Nil 都不会被接收。

lua_pushnil(&luaState);
lua_rawseti(&luaState, -2, 1);

显然 Lua 中的表格是一个数组,它不仅接受数字作为 索引,还有字符串或语言的任何其他值(nil 除外)。

我在表中添加了多个数字和具有索引的空字段,并且所有空字段都消失了,包括它们的索引值。即使最后一个值是数字。

进入:

lua_pushnumber(&luaState, 0);
lua_rawseti(&luaState, -2, 0);
lua_pushnil(&luaState);
lua_rawseti(&luaState, -2, 1);
lua_pushnumber(&luaState, 2);
lua_rawseti(&luaState, -2, 2);

我得到以下结果:{"0":0,"2":2}} 而我想要以下结果 {"0":0,"1":null,"2":2}}

为 null 添加字符串值不起作用,因为它给出了空引号。 {} 以 0 值结束。

我怎样才能在结果中获得一个带有 null 的索引?

【问题讨论】:

  • 如果我的回答不令人满意,请提供更多背景信息。你想序列化一个 Lua 表,用 C 和一些 JSON 库创建吗?实际输出是多少?什么是预期的输出?分享更多代码

标签: c lua null lua-table


【解决方案1】:

为什么你会收到一个 nil 值? {[1] = nil} 是一个空表。因此,您不能期望 json 字符串中有任何表字段。 我猜你期待[null]

如果您想看到像 [null, 2.5] 这样的输出,请创建像 {nil, 2.5} 这样的表。一个空表有无限的 nil 值。你会明白这很难显式序列化。

这假设您使用的是 dkjson。其他 Json 库可能会导致 nil 的其他表示形式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2021-12-20
    • 2017-08-22
    相关资源
    最近更新 更多