From 5e1557377e3aafcb248131f21282c454cadaccff Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Tue, 23 Apr 2013 14:41:52 -0400
Subject: util.json: Make encode(decode("[]"))=="[]".

---
 util/json.lua | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

(limited to 'util')

diff --git a/util/json.lua b/util/json.lua
index ff7351a7..e8de4d2d 100644
--- a/util/json.lua
+++ b/util/json.lua
@@ -18,6 +18,9 @@ local error = error;
 local newproxy, getmetatable = newproxy, getmetatable;
 local print = print;
 
+local has_array, array = pcall(require, "util.array");
+local array_mt = hasarray and getmetatable(array()) or {};
+
 --module("json")
 local json = {};
 
@@ -165,7 +168,12 @@ function simplesave(o, buffer)
 	elseif t == "string" then
 		stringsave(o, buffer);
 	elseif t == "table" then
-		tablesave(o, buffer);
+		local mt = getmetatable(o);
+		if mt == array_mt then
+			arraysave(o, buffer);
+		else
+			tablesave(o, buffer);
+		end
 	elseif t == "boolean" then
 		t_insert(buffer, (o and "true" or "false"));
 	else
@@ -237,7 +245,7 @@ function json.decode(json)
 	
 	local readvalue;
 	local function readarray()
-		local t = {};
+		local t = setmetatable({}, array_mt);
 		next(); -- skip '['
 		skipstuff();
 		if ch == "]" then next(); return t; end
-- 
cgit v1.2.3