forked from Dependencies/lua-json
				
			Added checking for sparseness and mixed key types when encoding array
							parent
							
								
									3845cef229
								
							
						
					
					
						commit
						70556ccea5
					
				|  | @ -6,7 +6,7 @@ A lightweight JSON library for Lua | ||||||
| * Implemented in pure Lua: works with 5.1, 5.2, 5.3 and JIT | * Implemented in pure Lua: works with 5.1, 5.2, 5.3 and JIT | ||||||
| * Fast: generally outperforms other pure Lua JSON implementations | * Fast: generally outperforms other pure Lua JSON implementations | ||||||
|   ([benchmark scripts](bench/)) |   ([benchmark scripts](bench/)) | ||||||
| * Tiny: around 280sloc, 8.5kb | * Tiny: around 290sloc, 9kb | ||||||
| * Proper error messages, *eg:* `expected '}' or ',' at line 203 col 30` | * Proper error messages, *eg:* `expected '}' or ',' at line 203 col 30` | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								json.lua
								
								
								
								
							
							
						
						
									
										16
									
								
								json.lua
								
								
								
								
							|  | @ -51,7 +51,19 @@ local function encode_table(val, stack) | ||||||
|   stack[val] = true |   stack[val] = true | ||||||
| 
 | 
 | ||||||
|   if val[1] ~= nil then |   if val[1] ~= nil then | ||||||
|     -- Treat as an array |     -- Treat as array -- check keys are valid and it is not sparse | ||||||
|  |     local n = 0 | ||||||
|  |     for k in pairs(val) do | ||||||
|  |       local t = type(k) | ||||||
|  |       if t ~= "number" then | ||||||
|  |         error("unexpected key of type '" .. t .. "' in array") | ||||||
|  |       end | ||||||
|  |       n = n + 1 | ||||||
|  |     end | ||||||
|  |     if n ~= #val then | ||||||
|  |       error("unexpected sparse array") | ||||||
|  |     end | ||||||
|  |     -- Encode | ||||||
|     for i, v in ipairs(val) do |     for i, v in ipairs(val) do | ||||||
|       table.insert(res, encode(v, stack)) |       table.insert(res, encode(v, stack)) | ||||||
|     end |     end | ||||||
|  | @ -63,7 +75,7 @@ local function encode_table(val, stack) | ||||||
|     for k, v in pairs(val) do |     for k, v in pairs(val) do | ||||||
|       local t = type(k) |       local t = type(k) | ||||||
|       if t ~= "string" then |       if t ~= "string" then | ||||||
|         error("expected key of type 'string', got '" .. t .. "'") |         error("unexpected key of type '" .. t .. "' in object") | ||||||
|       end |       end | ||||||
|       table.insert(res, encode(k, stack) .. ":" .. encode(v, stack)) |       table.insert(res, encode(k, stack) .. ":" .. encode(v, stack)) | ||||||
|     end |     end | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue