在lua中解码JSON的问题

我有以下代码:

PerformHttpRequest('http://ossie.dk/API/verify.json',function(err, text, headers)
    local r=json.decode(text)
    for s,t in pairs(r.servers)do
         print(t)
    end
end,"GET","",{})

我的问题是,当我解码verify.json时,我一直收到以下错误之一:bad argument #1 to 'strfind' (string expected, got nil) 或者是试图进行键值对时,它不是一个表。我真的很迷惑,对此事花费了很多时间。我认为整个问题在于JSON的设置。它需要是一个字符串,但也需要是一个表,以便我稍后可以用于我的键值对,以便我可以从中获取所有信息。我希望这有些意义。

脚本错误出现在这里:

local function scanwhite (str, pos)
  while true do
    pos = strfind (str, "%S", pos)
    if not pos then return nil end
    local sub2 = strsub (str, pos, pos + 1)
    if sub2 == "\239\187" and strsub (str, pos + 2, pos + 2) == "\191" then
      -- UTF-8字节顺序标记
      pos = pos + 3
    elseif sub2 == "//" then
      pos = strfind (str, "[\n\r]", pos + 2)
      if not pos then return nil end
    elseif sub2 == "/*" then
      pos = strfind (str, "*/", pos + 2)
      if not pos then return nil end
      pos = pos + 2
    else
      return pos
    end
  end
end

我的当前JSON看起来像这样:

{
    { "servers":
        "ip":
        [
            "144",
            "155",
            "166"
        ]
    }
}

顺便说一下,我已经尝试将

r.servers

更改为

r.ip

然后它给出了这个错误:无效的向量字段:ip

如果我只是做

for k,v in pairs(r) do

它会给我这个错误:

Table expected, got string

我正在使用FiveM的JSON库。

如果您有一些问题或不理解我的意思,请随时在评论中提问。

点赞
用户3342050
用户3342050

你的 str:find()str:sub() 命令中有拼写错误。

local function scanwhite(str, pos)
    while true do
        pos = str:find("%S", pos)
        if not pos then return nil end
        local sub1 = str:sub(pos, pos + 1)
        local sub2 = str:sub(pos + 2, pos + 2)
        if sub1 == "\239\187" and sub2 == "\191" then
            -- UTF-8 字节顺序标记
            pos = pos + 3
        elseif sub1 == "//" then
            pos = str:find("[\n\r]", pos + 2)
            if not pos then return nil end
        elseif sub1 == "/*" then
            pos = str:find("*/", pos + 2)
            if not pos then return nil end
            pos = pos + 2
        else
            return pos
        end
    end
end
2020-10-27 02:52:09
用户12043261
用户12043261

第一个 JSON 有点问题。你在没有告诉 JSON 你将要使用它的情况下使用了一个对象。尝试这个:

{
    "servers": {
        "ip": [
            "144",
            "155",
            "166"
        ]
    }
}
2021-04-14 11:02:45