You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
local json_before = {"key":[{},{},{},{},{},{},{},{},{},{}],"roleAttr":{"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"0":0,"1":0,"2":0}}
local list = json.decode(json_before );
local json_after = json.encode(list);
此时的json_afre为:{"key":[[],[],[],[],[],[],[],[],[],[]],"roleAttr":{"1":0,"0":0,"3":0,"2":0,"5":0,"4":0,"7":0,"6":0,"9":0,"8":0}}
local json_before = {"key":[{},{},{},{},{},{},{},{},{},{}],"roleAttr":{"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"0":0,"1":0,"2":0}}
local list = json.decode(json_before );
local json_after = json.encode(list);
此时的json_afre为:{"key":[[],[],[],[],[],[],[],[],[],[]],"roleAttr":{"1":0,"0":0,"3":0,"2":0,"5":0,"4":0,"7":0,"6":0,"9":0,"8":0}}
为何不一样?
local json_before = {"key":[{},{},{},{},{},{},{},{},{},{}],"roleAttr":{"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"0":0,"1":0,"2":0}}
local list = json.decode(json_before );
local json_after = json.encode(list);
In this moment json_after is : {"key":[[],[],[],[],[],[],[],[],[],[]],"roleAttr":{"1":0,"0":0,"3":0,"2":0,"5":0,"4":0,"7":0,"6":0,"9":0,"8":0}}
It seems like the encode_table treat input table as array when it found nil by next.
Could modify code like...
local t_type = 'array'
local n = 0
local max = -1
for k in pairs(val) do
if type(k) == "string" then
t_type = 'object'
break
elseif type(k) == "number" then
n = n + 1
max = math.max(max, k)
else
error("invalid table: mixed or invalid key types")
end
end
if t_type == 'array' then
if n == 0 then
t_type = 'object'
elseif n ~= #val then
t_type = 'sparse_array'
end
end
...to distinguish between array, sparse array and table.
Activity
utmhikari commentedon Jul 29, 2019
目测是源码encode_table的next测到nil直接判定为array了
可以小魔改一下,比如:
来区分array、稀疏array跟object
Trumeet commentedon Oct 5, 2019
English please.
fnaith commentedon Jun 1, 2020
(Just translating)
local json_before = {"key":[{},{},{},{},{},{},{},{},{},{}],"roleAttr":{"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"0":0,"1":0,"2":0}}
local list = json.decode(json_before );
local json_after = json.encode(list);
In this moment
json_afteris : {"key":[[],[],[],[],[],[],[],[],[],[]],"roleAttr":{"1":0,"0":0,"3":0,"2":0,"5":0,"4":0,"7":0,"6":0,"9":0,"8":0}}Why are
json_beforeandjson_afterdifferent?It seems like the
encode_tabletreat input table as array when it foundnilbynext.Could modify code like...
...to distinguish between array, sparse array and table.
Improved table encoding code to handle sparse arrays. Floating point …
ruyi789 commentedon Nov 22, 2022
parse_object
encode_table
alexandro-rezakhani commentedon Nov 22, 2022
Hello! Would you mind creating a pull request on my fork so that I may include your suggestions?
Thanks!