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 <jow@openwrt.org>
This commit is contained in:
parent
9b5046259f
commit
fbfa62627f
2 changed files with 6 additions and 49 deletions
|
@ -12,7 +12,7 @@ LUCI_TYPE:=mod
|
||||||
LUCI_BASENAME:=base
|
LUCI_BASENAME:=base
|
||||||
|
|
||||||
LUCI_TITLE:=LuCI core libraries
|
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:=LuaSrcDiet-0.12.1.tar.bz2
|
||||||
PKG_SOURCE_URL:=https://luasrcdiet.googlecode.com/files
|
PKG_SOURCE_URL:=https://luasrcdiet.googlecode.com/files
|
||||||
|
|
|
@ -9,6 +9,7 @@ local ldebug = require "luci.debug"
|
||||||
local string = require "string"
|
local string = require "string"
|
||||||
local coroutine = require "coroutine"
|
local coroutine = require "coroutine"
|
||||||
local tparser = require "luci.template.parser"
|
local tparser = require "luci.template.parser"
|
||||||
|
local json = require "luci.jsonc"
|
||||||
|
|
||||||
local _ubus = require "ubus"
|
local _ubus = require "ubus"
|
||||||
local _ubus_connection = nil
|
local _ubus_connection = nil
|
||||||
|
@ -600,55 +601,11 @@ function ubus(object, method, data)
|
||||||
end
|
end
|
||||||
|
|
||||||
function serialize_json(x, cb)
|
function serialize_json(x, cb)
|
||||||
local rv, push = nil, cb
|
local js = json.stringify(x)
|
||||||
if not push then
|
if type(cb) == "function" then
|
||||||
rv = { }
|
cb(js)
|
||||||
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
|
|
||||||
else
|
else
|
||||||
push('"%s"' % tostring(x):gsub('["%z\1-\31\\]',
|
return js
|
||||||
function(c) return '\\u%04x' % c:byte(1) end))
|
|
||||||
end
|
|
||||||
|
|
||||||
if not cb then
|
|
||||||
return table.concat(rv, "")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue