aboutsummaryrefslogtreecommitdiffstats
path: root/util/json.lua
diff options
context:
space:
mode:
Diffstat (limited to 'util/json.lua')
-rw-r--r--util/json.lua29
1 files changed, 8 insertions, 21 deletions
diff --git a/util/json.lua b/util/json.lua
index 05af709a..a750da2e 100644
--- a/util/json.lua
+++ b/util/json.lua
@@ -7,10 +7,10 @@
--
local type = type;
-local t_insert, t_concat, t_remove, t_sort = table.insert, table.concat, table.remove, table.sort;
+local t_insert, t_concat, t_remove = table.insert, table.concat, table.remove;
local s_char = string.char;
local tostring, tonumber = tostring, tonumber;
-local pairs, ipairs = pairs, ipairs;
+local pairs, ipairs, spairs = pairs, ipairs, require "util.iterators".sorted_pairs;
local next = next;
local getmetatable, setmetatable = getmetatable, setmetatable;
local print = print;
@@ -95,25 +95,12 @@ function tablesave(o, buffer)
if next(__hash) ~= nil or next(hash) ~= nil or next(__array) == nil then
t_insert(buffer, "{");
local mark = #buffer;
- if buffer.ordered then
- local keys = {};
- for k in pairs(hash) do
- t_insert(keys, k);
- end
- t_sort(keys);
- for _,k in ipairs(keys) do
- stringsave(k, buffer);
- t_insert(buffer, ":");
- simplesave(hash[k], buffer);
- t_insert(buffer, ",");
- end
- else
- for k,v in pairs(hash) do
- stringsave(k, buffer);
- t_insert(buffer, ":");
- simplesave(v, buffer);
- t_insert(buffer, ",");
- end
+ local _pairs = buffer.ordered and spairs or pairs;
+ for k,v in _pairs(hash) do
+ stringsave(k, buffer);
+ t_insert(buffer, ":");
+ simplesave(v, buffer);
+ t_insert(buffer, ",");
end
if next(__hash) ~= nil then
t_insert(buffer, "\"__hash\":[");