2 Licensed according to the included 'LICENSE' document
3 Author: Thomas Harning Jr <harningt@gmail.com>
9 local tostring = tostring
11 local table_concat
= require("table").concat
12 local util_merge
= require("json.util").merge
14 local is_52
= _VERSION
== "Lua 5.2"
21 local defaultOptions
= {
28 Cleanup function to unmark a value as in the encoding process and return
31 local function unmarkAfterEncode(tab
, state
, ...)
32 state
.already_encoded
[tab
] = nil
36 Encode a table as a JSON Object ( keys = strings, values = anything else )
38 local function encodeTable(tab
, options
, state
)
39 -- Make sure this value hasn't been encoded yet
40 state
.check_unique(tab
)
41 local encode
= state
.encode
42 local compositeEncoder
= state
.outputEncoder
.composite
43 local valueEncoder
= [[
45 for k, v in pairs(composite) do
47 assert(ti == 'string' or ti == 'number' or ti == 'boolean', "Invalid object index type: " .. ti)
48 local name = encode(tostring(k), state, true)
55 local val = encode(v, state)
62 return unmarkAfterEncode(tab
, state
, compositeEncoder(valueEncoder
, '{', '}', nil, tab
, encode
, state
))
65 local function getEncoder(options
)
66 options
= options
and util_merge({}, defaultOptions
, options
) or defaultOptions
68 table = function(tab
, state
)
69 return encodeTable(tab
, options
, state
)
77 getEncoder
= getEncoder
81 _G
.json
= _G
.json
or {}
82 _G
.json
.encode
= _G
.json
.encode
or {}
83 _G
.json
.encode
.object
= object