无法从Nginx Lua获取正确的表密钥?

时间:2018-07-03 08:57:09

标签: json nginx post lua

当前发布此数据:

{"test":"hello","test2":"world"}

标题是:

"Content-Type: application/json"

当前尝试遍历json,但是在我的代码中,由于某种原因,它已经将发布的数据视为table。因此,即使我尝试对表进行json编码和解码,它也没有用。

无论如何,当我循环遍历时,我只会得到一个循环,其中的键是这样的:

"test":"hello"

我想知道这里出了什么问题。我试图遍历每个键并将值设置为redis。

他们的钥匙应该是这样的:

test

这是我的content_by_lua部分:

content_by_lua '
             local cjson = require "cjson"
             local redis = require "resty.redis"
             local red = redis:new()
             red:set_timeout(1000) -- 1 sec

             local ok, err = red:connect("127.0.0.1", 6379)
             if not ok then
                ngx.say("failed to connect: ", err)
                return
             end


             ngx.header.content_type = "application/json; charset=utf-8"
             ngx.req.read_body()

             local data, err = ngx.req.get_post_args()
             if not data then
               ngx.say("err: ",err)
               return
             end

             ngx.status = ngx.HTTP_OK

             for key, val in pairs(data) do
                   ok, err = red:set(key, val)
                   if not ok then
                     ngx.say("failed to set key: ", err)
                     return
                   end
             end
           ';

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

如果代码期望通过Lua表进行迭代,则它将无法处理您正在测试的JSON格式的字符串:

{"test":"hello","test2":"world"}

作为Lua表,应该是:

{"test" = "hello", "test2" = "world"}

现在,为什么它不能正确解码JSON等,我无法从您发布的代码中得知。