JSON.Lua json.encode返回nil

时间:2018-07-17 14:35:17

标签: json lua null discord garrys-mod

我是LUA的新手,并尝试使用Garrys Mod学习这种语言的编码。

我想从Garrys Mod聊天中获取消息,并将其发送到带有Webhook的Discord频道中。

它可以工作,但是我尝试通过嵌入消息扩展此项目。我为此需要JSON,并将json.lua用作库。

但是,一旦我发送一条消息,就会检索到以下错误消息:

  

试图索引全局'json'(nil值)

导致错误的代码如下:

json.encode({ { 
        ["embeds"] = { 
            ["description"] = text, 
            ["author"] = { 
                ["name"] = ply:Nick()
            }, 
        }, 
    } }),

完整代码:

AddCSLuaFile()
json = require("json")

webhookURL = "https://discordapp.com/api/webhooks/XXX"
local DiscordWebhook = DiscordWebhook or {}

hook.Add( "PlayerSay", "SendMsg", function( ply, text )
    t_post = {
        content = json.encode({ { 
            ["embeds"] = { 
                ["description"] = text, 
                ["author"] = { 
                    ["name"] = ply:Nick()
                }, 
            }, 
        } }),
        username = "Log",
    } 
    http.Post(webhookURL, t_post)
end )

我希望有人能帮助我

1 个答案:

答案 0 :(得分:1)

Garry的Mod确实提供了两个与json一起使用的功能。

它们是:

util.TableToJSON( table table, boolean prettyPrint=false )

util.JSONToTable( string json )

不需要导入json,如果我没记错的话,甚至不可能。

对于您要执行的操作,您需要将参数构建为如下表:

local arguments = {
["key"] = "Some value",
["42"] = "Not always the answer",
["deeper"] = {
  ["my_age"] = 22,
  ["my_name"] = getMyName()
},
["even more"] = from_some_variable

然后致电

local args_as_json = util.TableToJSON(arguments)

现在您可以将args_as_json传递给您的

http.Post( string url, table parameters, function onSuccess=nil, function onFailure=nil, table headers={} )