diff --git a/json.lua b/json.lua index bc4b745..53bc7ef 100644 --- a/json.lua +++ b/json.lua @@ -22,7 +22,7 @@ -- SOFTWARE. -- -local json = { _version = "0.1.2" } +local json = { _version = "0.1.2fix" } ------------------------------------------------------------------------------- -- Encode @@ -233,7 +233,7 @@ end local function parse_string(str, i) - local res = "" + local res = {} local j = i + 1 local k = j @@ -244,25 +244,25 @@ local function parse_string(str, i) decode_error(str, j, "control character in string") elseif x == 92 then -- `\`: Escape - res = res .. str:sub(k, j - 1) + res[#res + 1] = str:sub(k, j - 1) j = j + 1 local c = str:sub(j, j) if c == "u" then local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1) or str:match("^%x%x%x%x", j + 1) or decode_error(str, j - 1, "invalid unicode escape in string") - res = res .. parse_unicode_escape(hex) + res[#res + 1] = parse_unicode_escape(hex) j = j + #hex else if not escape_chars[c] then decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string") end - res = res .. escape_char_map_inv[c] + res[#res + 1] = escape_char_map_inv[c] end k = j + 1 elseif x == 34 then -- `"`: End of string - res = res .. str:sub(k, j - 1) + res[#res + 1] = str:sub(k, j - 1) return res, j + 1 end