util.json: Added function encode_ordered(object).
authorWaqas Hussain <waqas20@gmail.com>
Wed, 18 Jan 2012 03:54:26 +0000 (08:54 +0500)
committerWaqas Hussain <waqas20@gmail.com>
Wed, 18 Jan 2012 03:54:26 +0000 (08:54 +0500)
util/json.lua

index 5d0b087616750df647f9d6d5001aeee1be33da45..efc602f0ed7a183b064b5be7307e018c8977a212 100644 (file)
@@ -1,6 +1,6 @@
 
 local type = type;
-local t_insert, t_concat, t_remove = table.insert, table.concat, table.remove;
+local t_insert, t_concat, t_remove, t_sort = table.insert, table.concat, table.remove, table.sort;
 local s_char = string.char;
 local tostring, tonumber = tostring, tonumber;
 local pairs, ipairs = pairs, ipairs;
@@ -79,11 +79,25 @@ function tablesave(o, buffer)
        if next(__hash) ~= nil or next(hash) ~= nil or next(__array) == nil then
                t_insert(buffer, "{");
                local mark = #buffer;
-               for k,v in pairs(hash) do
-                       stringsave(k, buffer);
-                       t_insert(buffer, ":");
-                       simplesave(v, buffer);
-                       t_insert(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
                end
                if next(__hash) ~= nil then
                        t_insert(buffer, "\"__hash\":[");
@@ -129,6 +143,11 @@ function json.encode(obj)
        simplesave(obj, t);
        return t_concat(t);
 end
+function json.encode_ordered(obj)
+       local t = { ordered = true };
+       simplesave(obj, t);
+       return t_concat(t);
+end
 
 -----------------------------------