Comments (5)
English please.
from json.lua.
目测是源码encode_table的next测到nil直接判定为array了
可以小魔改一下,比如:
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
来区分array、稀疏array跟object
from json.lua.
(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);
此时的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}}
Why are json_before
and json_after
different?
目测是源码encode_table的next测到nil直接判定为array了
可以小魔改一下,比如: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来区分array、稀疏array跟object
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.
from json.lua.
local __json_object = {__json_object = function() end}
function json.newObject()
return setmetatable({}, __json_object)
end
parse_object
local function parse_object(str, i)
local res = json.newObject()
encode_table
local t = getmetatable(val)
if (t == nil or t.__json_object == nil) and (rawget(val, 1) ~= nil or next(val) == nil) then
from json.lua.
Hello! Would you mind creating a pull request on my fork so that I may include your suggestions?
Thanks!
from json.lua.
Related Issues (20)
- Floating point numbers with dot causing error HOT 2
- Unable to encode 'sparse array's HOT 5
- How to install it for Tengine
- Empty object encodes as array HOT 2
- decode simple table error HOT 1
- Not working with NGNIX HOT 5
- Large numbers lose precision when decoding HOT 2
- bad argument #1 to 'rawget' (table expected, got string)
- decoding of object with 'duplicate' key HOT 2
- Annotated Tags Please
- There is an idea to optimize the code for json.lua HOT 25
- json encode error HOT 2
- pcall json.decode failing, "attempt to call a table value" HOT 1
- No functions support HOT 1
- Output is all on one line
- Uh how do i use this in lua... the readme.md was very vague HOT 5
- Large numbers serialized incorrectly HOT 3
- Encoding runs in worst-case quadratic time HOT 4
- Decoding fails for JSON with array of strings within an object.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from json.lua.