lua-cjson 空数组问题

708 views
Skip to first unread message

wxianfeng

unread,
Jun 20, 2013, 11:52:09 PM6/20/13
to open...@googlegroups.com
hi,all:

lua-cjson encode {} 得到的是  {}

cjson.encode({}) => {}

我想得到 空数组  []  , 请问  lua-cjson 支持吗?

我用了  lua4json lib, 得到的是 []

看了下 主要原因是判断 isArray 的方式不一样,

如果不支持,我还想使用 lua-cjson, 怎么解决, 自己去改 lua-cjson c源码?

thanks



ps: 我发邮件的时候,为什么一个是  open...@googlegroups.com, 一个是 openresty...@googlegroups.com, 不一样?


agentzh

unread,
Jun 21, 2013, 1:35:21 AM6/21/13
to openresty
Hello!

2013/6/20 wxianfeng <wang....@gmail.com>:
> lua-cjson encode {} 得到的是 {}
>
> cjson.encode({}) => {}
>
> 我想得到 空数组 [] , 请问 lua-cjson 支持吗?
>
> 我用了 lua4json lib, 得到的是 []
>
> 看了下 主要原因是判断 isArray 的方式不一样,
>
> 如果不支持,我还想使用 lua-cjson, 怎么解决, 自己去改 lua-cjson c源码?
>

最简单的做法是自己加一个判断:

if json == "{}" then
json = "[]"
end

当然,自己修改 lua-cjson 的 C 源也是一个办法 :)

Best regards,
-agentzh

agentzh

unread,
Jun 21, 2013, 1:36:35 AM6/21/13
to openresty
Hello!

2013/6/20 wxianfeng:
> ps: 我发邮件的时候,为什么一个是 open...@googlegroups.com, 一个是
> openresty...@googlegroups.com, 不一样?
>

前者是平时发贴的地址,后者是订阅地址(或者说申请加入邮件列表的地址)。subscribe 这个单词是订阅的意思。

Best regards,
-agentzh

smallfish

unread,
Jun 21, 2013, 1:40:34 AM6/21/13
to open...@googlegroups.com
额。。我就是这么干的。。。捂脸



2013/6/21 agentzh <age...@gmail.com>

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html



wxianfeng

unread,
Jun 21, 2013, 1:42:42 AM6/21/13
to open...@googlegroups.com
额, 这个不行的吧

    if json == "{}" then
       json = "[]"
    end

table 有可能很深, 不止一层,所以希望 encode 出来后, 凡是 遇到 {} 都变成  []

thanks




2013/6/21 smallfish <smallf...@gmail.com>

kindy

unread,
Jun 21, 2013, 8:15:35 AM6/21/13
to openresty

看来有必要改源码了,已经一堆人被坑了。

Jason Calio

unread,
Jul 6, 2013, 3:38:35 AM7/6/13
to open...@googlegroups.com
的确,lua cjson的这个问题在实际使用中造成了不少麻烦。今天花了一些时间修改了一下cjson的源代码,现在可以定制cjson.encode遇到空数组的时候的行为。

使用方法如下:

$cd lua-cjson-2.1.0
$patch -p0 < encode_empty_table_option.patch

然后编译lua cjson即可。

lua代码示例:

local cjson = require "cjson"                                                    
                                                                                 
local data = {{ a = 1 },{ },{ 1 }}                                               
                                                                                 
print(cjson.encode_empty_table_as_object()) -- default true                      
                                                                                 
print(cjson.encode(data))                                                        
                                                                                 
cjson.encode_empty_table_as_object(false)                                    
print(cjson.encode(data))

这个补丁为cjson增加了encode_empty_table_as_object方法和配置项,默认值为true,和cjson默认的行为一致。当需要的时候,设置这个值为false,这样encode出来的空的table就变成[]了。每次调用cjson.encode之前都可以修改这个配置。

补丁见附件,基于lua-cjson-2.1.0。
encode_empty_table_option.patch

XinQi Yang

unread,
Jul 7, 2013, 8:34:23 PM7/7/13
to open...@googlegroups.com
很赞啊....打补丁去,这个问题确实是...





--
xinqiyang

wxianfeng

unread,
Jul 7, 2013, 9:42:33 PM7/7/13
to open...@googlegroups.com
赞, 我正需要. 


2013/7/8 XinQi Yang <xinq...@gmail.com>
Reply all
Reply to author
Forward
0 new messages