openrestylua的userdatanull与ngx.null问题总结

编程

背景

解析json的时候发现一个问题,如果字段中包含null值,返回的结果不是nil而是userdata类型的ngx.null

分析

  1. nil是lua中基本数据类型之一,用来表示一个无效值,如果一个变量被设置为nil相当于告知该变量未定义(不存在)一样
  2. OpenResty 的 Lua 接口还提供了一种特殊的空值,即 ngx.null,用来表示不同于 nil 的“空值”
  3. json中的value如果是null, 经过cjson.decode以后,该value的类型就是userdata,值是ngx.null , 如果强制转换为字符串,则打印出来的内容是“userdata: null”, 所以decode之后,判断value是否为空的时候,需要和ngx.null比较

测试

-- test_cjson.lua

local cjson = require("cjson")

local cjson_decode = cjson.decode

local cjson_encode = cjson.encode

local aa = "{"cc":null}"

bb = cjson_decode(aa)

print(type(bb.cc))

print(tostring(bb.cc))

输出

userdata

userdata: NULL

参考

https://notes.doublemine.me/2018-01-26-lua%E8%AF%BB%E5%8F%96redis%E6%95%B0%E6%8D%AE%E7%9A%84null%E5%88%A4%E6%96%AD.html

https://segmentfault.com/a/1190000007937895

https://vul-hunters.oschina.io/hunter-blogs/posts/lua-null/

https://legacy.gitbook.com/book/moonbingbing/openresty-best-practices/discussions/40

https://notes.doublemine.me/2018-01-26-lua%E8%AF%BB%E5%8F%96redis%E6%95%B0%E6%8D%AE%E7%9A%84null%E5%88%A4%E6%96%AD.html

https://www.kyne.com.au/~mark/software/lua-cjson-manual.html#_decode

以上是 openrestylua的userdatanull与ngx.null问题总结 的全部内容, 来源链接: utcz.com/z/517024.html

回到顶部