util.json: Use util.iterators.sorted_pairs() in ordered mode
authorMatthew Wild <mwild1@gmail.com>
Fri, 21 Sep 2018 14:35:35 +0100
changeset 9332 19bc3ec13f07
parent 9331 a9592107021b
child 9333 36badabc85ce
util.json: Use util.iterators.sorted_pairs() in ordered mode
util/json.lua
--- a/util/json.lua	Fri Sep 21 14:30:20 2018 +0100
+++ b/util/json.lua	Fri Sep 21 14:35:35 2018 +0100
@@ -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 @@
 	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\":[");