如何使用lua处理json字符串中的空值?

如何使用lua处理json字符串中的空值?,json,lua,Json,Lua,我在星号pbx中使用lua。我在处理json字符串时遇到以下问题 json“null”值在lua中转换为函数类型。为什么? 如何处理这种情况?因为我期望nil,因为在json中没有值表示null,而nil在lua中表示nothing local json = require( "json" ) local inspect = require("inspect") local myjson_str='{"Sms":{"key":"xxxxxxxxxxxxxxxxxxxxx","to":"{call

我在星号pbx中使用lua。我在处理json字符串时遇到以下问题

json“null”值在lua中转换为函数类型。为什么?

如何处理这种情况?因为我期望nil,因为在json中没有值表示null,而nil在lua中表示nothing

local json = require( "json" )
local inspect = require("inspect")
local myjson_str='{"Sms":{"key":"xxxxxxxxxxxxxxxxxxxxx","to":"{caller}","senderid":null,"type":"Simple","content":"Your request has been accepted in Previous Miss call. We get back to you very soon."}}'

local myjson_table = json.decode(myjson_str)
print(type(myjson_table["Sms"]["senderid"]))
print(myjson_table)
print(inspect(myjson_table))
print(json.encode(myjson_table))
上面提到的是

function
table: 0xf5e770
{
  Sms = {
    content = "Your request has been accepted in Previous Miss call. We get back to you very soon.",
    key = "xxxxxxxxxxxxxxxxxxxxx",
    senderid = <function 1>,
    to = "{caller}",
    type = "Simple"
  }
}
{"Sms":{"type":"Simple","key":"xxxxxxxxxxxxxxxxxxxxx","senderid":null,"content":"Your request has been accepted in Previous Miss call. We get back to you very soon.","to":"{caller}"}}
函数
表:0xf5e770
{
短信={
content=“您的请求已在上次小姐电话中被接受。我们将很快回复您。”,
key=“XXXXXXXXXXXXXXXXXX”,
senderid=,
to=“{caller}”,
type=“简单”
}
}
{“Sms”:{“type”:“Simple”,“key”:“xxxxxxxxxxxxxxxxxxxxxx”,“senderid”:null,“content”:“您的请求已在上次未接来电中被接受。我们很快会回复您。”,“to”:“{caller}”

由特定的库决定如何表示
null
值。 使用
nil
有其自身的问题,因为它不可能找到 原始JSON的键为空值,或者根本没有这样的键。 所以有些库只返回一些唯一的值。有些提供 传递此值的方法,如
json.decode(str,NULL\u值)
。 所以答案就是阅读你所使用的库的文档/来源。 很可能它提供了类似于
json.null的值来检查
任何一个值都为空。但函数的选择真的很奇怪,因为
它们有一些不确定的唯一性规则。

或者尝试另一个库。

首先,@moteus是正确的:


如何表示空值取决于特定的库

如果您正在使用,解决方案是使用占位符而不是
null
,并使用指定的编码选项将表结构序列化为json字符串:

--定义占位符
NullPlaceholder=“\0”
--在内部表中使用它
表结构={}
表结构['someNullValue']=NullPlaceholder
--将占位符传递给encode方法
encode_options={null=NullPlaceholder}
jsonString=JSON:encode(表结构,nil,encode_选项)
这导致了

{"someNullValue": null}

json.util.null是我最终找到的函数。我设法处理同样的问题。您的观点是正确的,这取决于您使用的库/语言。