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 |