others-How to solve 'table expected,got userdata' error when trying to process a table in lua ?
1. Problem
Sometimes, when we try to process a table in lua, we got this error:
2022/04/27 19:51:32 [error] 4487#0:
*2245086 [kong] init.lua:297 [basic-auth] /usr/local/share/lua/5.1/kong/plugins/common/utils.lua:72:
bad argument #1 to 'next' (table expected, got userdata),
client: 10.2.1.3, server: kong,
request: "GET /test/hello/a HTTP/1.1",
host: "10.2.2.4:8000"
Here is the code that cause the above error:
function isTableEmpty(t)
return t==nil or (next(t)==nil)
end
local aValue = '{"a":123}'
isTableEmpty(aValue)
2. Solution
Here is the code that solves the error:
function isTableEmpty(t)
return t==nil or (next(t)==nil)
end
local cjson = require 'cjson'
local aValue = '{"a":123}'
local theObject = cjson.decode(aValue)
isTableEmpty(theObject)
So the keypoint is to check if you have passed a non-table-object instead of a table to the function that needs a table.
3. Summary
In this post, I demonstrated how to solve ‘table expected,got userdata’ error when trying to process a table in lua. The keypoint is to check if you have passed a non-table-object instead of a table to the function that needs a table. That’s it, thanks for your reading.