cjson 的encode 如何生成一个空array, []

678 views
Skip to first unread message

zhu jianhua

unread,
Sep 6, 2012, 4:39:40 AM9/6/12
to open...@googlegroups.com
我的web service api 像下面这样,当返回一个空的array时, [] , 如何生成?
[
    {
        "id":""
    }
]
下面的code是我的代码
local res = {}
local resp_data = cjson.encode(res)
但是这个json的编码会返回 {}.

Fang Zhou

unread,
Sep 6, 2012, 5:35:24 AM9/6/12
to open...@googlegroups.com
if(res == {}){
      res = {"id"=""}
}

2012/9/6 zhu jianhua <zhuji...@gmail.com>

Fang Zhou

unread,
Sep 6, 2012, 5:39:25 AM9/6/12
to open...@googlegroups.com
不好意思, 发的不是lua代码- -
if res == {} then
    res = {"id" = ""}
end

2012/9/6 Fang Zhou <ark...@gmail.com>

Jianhua Zhu

unread,
Sep 6, 2012, 5:43:22 AM9/6/12
to open...@googlegroups.com
res = {"id"=""}这个语法合法吗?

Fang Zhou

unread,
Sep 6, 2012, 5:46:32 AM9/6/12
to open...@googlegroups.com
再次不好意思, 我对lua不是太熟, 刚才的代码没测试过,下面是测试过正确的语句
if #res == 0 then
    res = {["id"]=""}
end

2012/9/6 Jianhua Zhu <zhuji...@gmail.com>

Jianhua Zhu

unread,
Sep 6, 2012, 6:00:08 AM9/6/12
to open...@googlegroups.com
我测试了一下,不成。
cjson.encode 后,结果是 
 {"id":""}

Fang Zhou

unread,
Sep 6, 2012, 6:02:21 AM9/6/12
to open...@googlegroups.com
哦, 那可能是res = {{["id"]=""}}, 你试试。

Jianhua Zhu

unread,
Sep 6, 2012, 6:12:56 AM9/6/12
to open...@googlegroups.com
谢谢,还是不行.
结果是 [{"id":""}]

Jianhua Zhu

unread,
Sep 6, 2012, 6:14:05 AM9/6/12
to open...@googlegroups.com
我没有说清楚,需要返回的值为  []  表示空。

Chen Richard

unread,
Sep 6, 2012, 6:45:07 AM9/6/12
to open...@googlegroups.com

local res = {[1]={id=""}}
local resp_data = cjson.encode(res)

kindy

unread,
Sep 6, 2012, 7:42:21 AM9/6/12
to open...@googlegroups.com

试试

(next(res)) and cjson.encode(res) or '[]' 吧。


- - - - - - - - - - - -
林青(Kindy Lin)

Fang Zhou

unread,
Sep 6, 2012, 7:43:15 AM9/6/12
to open...@googlegroups.com
如果说这样的话, 最暴力的办法就是,
if #res == 0 then
    resp_data = "[]"
else
    resp_data = cjson.encode(res)
end

主要因为本来json里面[]是表示Array的,{}是表示Table的,但是lua默认就是Table,也只有table,没有Array。

2012/9/6 Chen Richard <richar...@zkteco.com>

Lance Li

unread,
Sep 6, 2012, 9:39:03 AM9/6/12
to open...@googlegroups.com, open...@googlegroups.com
这个最好

发自我的 iPad

pahu...@gmail.com

unread,
Feb 17, 2014, 2:36:27 AM2/17/14
to open...@googlegroups.com, ark...@gmail.com
請問一下,如果我的代碼是這樣

resp_data = {}
payload = {}
count = 0

resp_data['payload'] = payload
resp_data['count'] = count

print(cjson.encode(resp_data))

最後會獲得
{"count":0,"payload":{}}
而不是
{"count":0,"payload":[]}

請問有什麼辦法可以解決? 可以徹底解決 cjson empty array的輸出問題?







Fang Zhou於 2012年9月6日星期四UTC+8下午7時43分15秒寫道:
> ]下面的code是我的代码local res = {}local resp_data = cjson.encode(res)但是这个json的编码会返回 {}.

Yichun Zhang (agentzh)

unread,
Feb 18, 2014, 5:36:45 PM2/18/14
to openresty
Hello!

2014-02-16 23:36 GMT-08:00 <pahu...@gmail.com>:
> print(cjson.encode(resp_data))
> 最後會獲得
> {"count":0,"payload":{}}
> 而不是
> {"count":0,"payload":[]}
> 請問有什麼辦法可以解決? 可以徹底解決 cjson empty array的輸出問題?
>

请使用我的 lua-cjson 分支:

https://github.com/agentzh/lua-cjson

该分支合并了支家乐的补丁,支持 encode_empty_table_as_object() 配置型函数。即可以这么使用:

local cjson = require "cjson"
cjson.encode_empty_table_as_object(false)
print(cjson.encode({}))
print(cjson.encode({dogs = {}}))

上面这段代码的输出是

[]
{"dogs":[]}

正则你所期望的。

下一个版本的 ngx_openresty 将包含从我的 github 分支 tag 出来的发布。

Regards,
-agentzh

Pahud

unread,
Feb 18, 2014, 7:03:42 PM2/18/14
to open...@googlegroups.com

非常感謝!

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com

发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages