将字符串传递给 JSON 库后转变为表格

当我在 Windows 10 上执行这段代码时,会在库内部收到一个错误。

local json = loadfile("json.lua")()

local handle = io.popen("curl \"https://someurl.com\"")
local result = handle:read("*all")
handle:close()

local output = json:decode(result)

控制台中的错误信息:

lua: json.lua:377: 预期的参数类型为字符串,实际参数类型为表格
stack traceback:
        [C]: in function 'error'
        json.lua:377: in method 'decode'
        monitor.lua:10: in main chunk
        [C]: in ?

我在 Windows 10 上的控制台中运行此代码并使用此库:https://github.com/rxi/json.lua

即使我尝试使用不同类型的参数(如数字或字符串),此函数始终返回相同的错误。

function json.decode(str)
  if type(str) ~= "string" then
    error("预期的参数类型为字符串,实际类型为" .. type(str))
  end
  local res, idx = parse(str, next_char(str, 1, space_chars, true))
  idx = next_char(str, idx, space_chars, true)
  if idx <= #str then
    decode_error(str, idx, "尾随垃圾")
  end
  return res
end

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

点赞
stackoverflow用户2858170
stackoverflow用户2858170
`local output = json:decode(result)` 是语法糖,等同于 `local output = json.decode(json, result)` 。

`json` 是一个表。

因此在函数 `json.decode` 中出现了以下 if 语句:

if type(str) ~= "string" then error("expected argument of type string, got " .. type(str)) end


这就导致了观察到的错误。

要修复这个问题,可以将函数定义更改为:

function json:decode(str) -- 代码 end


或者调用

local output = json.decode(result)

```

你应该选择第二个选项,因为更改 json 库会影响已经使用 json.decode 的原始作者想要的代码。

2022-01-08 20:42:27