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 |