From fbfa62627f66f98b6dd37ed6050c9b99f2479881 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sat, 21 Nov 2015 00:29:55 +0100 Subject: [PATCH] luci-base: switch to luci-lib-jsonc Add dependency on luci-lib-jsonc and use it to reimplement luci.util.serialize_json(). Signed-off-by: Jo-Philipp Wich --- modules/luci-base/Makefile | 2 +- modules/luci-base/luasrc/util.lua | 53 ++++----------------------------------- 2 files changed, 6 insertions(+), 49 deletions(-) diff --git a/modules/luci-base/Makefile b/modules/luci-base/Makefile index 54506b023..26cbe0820 100644 --- a/modules/luci-base/Makefile +++ b/modules/luci-base/Makefile @@ -12,7 +12,7 @@ LUCI_TYPE:=mod LUCI_BASENAME:=base LUCI_TITLE:=LuCI core libraries -LUCI_DEPENDS:=+lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +LUCI_DEPENDS:=+lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2 PKG_SOURCE_URL:=https://luasrcdiet.googlecode.com/files diff --git a/modules/luci-base/luasrc/util.lua b/modules/luci-base/luasrc/util.lua index dcf8230b3..787bc66f9 100644 --- a/modules/luci-base/luasrc/util.lua +++ b/modules/luci-base/luasrc/util.lua @@ -9,6 +9,7 @@ local ldebug = require "luci.debug" local string = require "string" local coroutine = require "coroutine" local tparser = require "luci.template.parser" +local json = require "luci.jsonc" local _ubus = require "ubus" local _ubus_connection = nil @@ -600,55 +601,11 @@ function ubus(object, method, data) end function serialize_json(x, cb) - local rv, push = nil, cb - if not push then - rv = { } - push = function(tok) rv[#rv+1] = tok end - end - - if x == nil then - push("null") - elseif type(x) == "table" then - -- test if table is array like - local k, v - local n1, n2 = 0, 0 - for k in pairs(x) do n1 = n1 + 1 end - for k in ipairs(x) do n2 = n2 + 1 end - - if n1 == n2 and n1 > 0 then - push("[") - for k = 1, n2 do - if k > 1 then - push(",") - end - serialize_json(x[k], push) - end - push("]") - else - push("{") - for k, v in pairs(x) do - push("%q:" % tostring(k)) - serialize_json(v, push) - if next(x, k) then - push(",") - end - end - push("}") - end - elseif type(x) == "number" or type(x) == "boolean" then - if (x ~= x) then - -- NaN is the only value that doesn't equal to itself. - push("Number.NaN") - else - push(tostring(x)) - end + local js = json.stringify(x) + if type(cb) == "function" then + cb(js) else - push('"%s"' % tostring(x):gsub('["%z\1-\31\\]', - function(c) return '\\u%04x' % c:byte(1) end)) - end - - if not cb then - return table.concat(rv, "") + return js end end -- 2.11.0