webmcp

annotate framework/env/encode/json.lua @ 0:9fdfb27f8e67

Version 1.0.0
author jbe/bsw
date Sun Oct 25 12:00:00 2009 +0100 (2009-10-25)
parents
children 985024b16520
rev   line source
jbe/bsw@0 1 --[[--
jbe/bsw@0 2 json_string = -- JavaScript code representing the given datum (with quotes, if needed)
jbe/bsw@0 3 encode.json(
jbe/bsw@0 4 obj -- true, false, nil or a number or string
jbe/bsw@0 5 )
jbe/bsw@0 6
jbe/bsw@0 7 This function encodes any native datatype or atom in JavaScript object notation (JSON).
jbe/bsw@0 8
jbe/bsw@0 9 --]]--
jbe/bsw@0 10
jbe/bsw@0 11 function encode.json(obj)
jbe/bsw@0 12 if obj == nil then
jbe/bsw@0 13 return "null";
jbe/bsw@0 14 elseif atom.has_type(obj, atom.boolean) then
jbe/bsw@0 15 return tostring(obj)
jbe/bsw@0 16 elseif atom.has_type(obj, atom.number) then
jbe/bsw@0 17 return tostring(obj)
jbe/bsw@0 18 else
jbe/bsw@0 19 return
jbe/bsw@0 20 "'" ..
jbe/bsw@0 21 string.gsub(atom.dump(obj), ".",
jbe/bsw@0 22 function (char)
jbe/bsw@0 23 if char == "\r" then return "\\r" end
jbe/bsw@0 24 if char == "\n" then return "\\n" end
jbe/bsw@0 25 if char == "\\" then return "\\\\" end
jbe/bsw@0 26 if char == "'" then return "\\'" end
jbe/bsw@0 27 if char == "/" then return "\\/" end -- allowed according to RFC4627, needed for </script>
jbe/bsw@0 28 local byte = string.byte(char)
jbe/bsw@0 29 if byte < 32 then return string.format("\\u%04x", byte) end
jbe/bsw@0 30 end
jbe/bsw@0 31 ) ..
jbe/bsw@0 32 "'"
jbe/bsw@0 33 end
jbe/bsw@0 34 end

Impressum / About Us