JSON: Add encode / decode shortcut
authorSteven Barth <steven@midlink.org>
Fri, 13 Nov 2009 18:25:59 +0000 (18:25 +0000)
committerSteven Barth <steven@midlink.org>
Fri, 13 Nov 2009 18:25:59 +0000 (18:25 +0000)
libs/json/luasrc/json.lua

index 26b5404..5b09285 100644 (file)
@@ -52,6 +52,7 @@ local type        = type
 local pairs        = pairs
 local ipairs    = ipairs
 local next      = next
 local pairs        = pairs
 local ipairs    = ipairs
 local next      = next
+local pcall            = pcall
 
 local getmetatable = getmetatable
 
 
 local getmetatable = getmetatable
 
@@ -59,6 +60,33 @@ local getmetatable = getmetatable
 -- @cstyle     instance
 module "luci.json"
 
 -- @cstyle     instance
 module "luci.json"
 
+
+--- Directly decode a JSON string
+-- @param json JSON-String
+-- @return Lua object
+function decode(json, ...)
+       local a = ActiveDecoder(function() return nil end, ...)
+       a.chunk = json
+       local s, obj = pcall(a.get, a)
+       return s and obj or nil
+end
+
+
+--- Direcly encode a Lua object into a JSON string.
+-- @param obj Lua Object
+-- @return JSON string
+function encode(obj, ...)
+       local out = {}
+       local e = Encoder(obj, 1, ...):source()
+       local chnk, err
+       repeat
+               chnk, err = e()
+               out[#out+1] = chnk
+       until chnk
+       return not err and table.concat(out) or nil
+end
+
+
 --- Null replacement function
 -- @return null
 function null()
 --- Null replacement function
 -- @return null
 function null()