向 Lua 表添加空值

我想通过 C Lua 库发送一个 Lua 表。对于值,这很好用,但当插入空时我遇到了麻烦。插入空会从收到的 JSON 数据中删除数据。

发送一个值很好用:

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

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

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

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

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

输入以下代码:

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}

添加一个字符串值作为空值是不起作用的,因为它会加上空引号。{} 最终变成了 0。

如何在结果中获取一个空的索引?

原文链接 https://stackoverflow.com/questions/69796054

点赞
stackoverflow用户2858170
stackoverflow用户2858170

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

我猜您希望得到[null]

如果你想要看到类似[null, 2.5]的输出,请创建一个像{nil, 2.5}的表。空表有无限的空值。您将理解明确序列化将是困难的。

这假设您正在使用dkjson。其他Json库可能会导致空值的其他表示。

2021-11-01 11:28:42