initial commit
This commit is contained in:
58
LibTSM/Util/JSON.lua
Normal file
58
LibTSM/Util/JSON.lua
Normal file
@@ -0,0 +1,58 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster --
|
||||
-- https://tradeskillmaster.com --
|
||||
-- All Rights Reserved - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
--- JSON Functions
|
||||
-- @module JSON
|
||||
|
||||
local _, TSM = ...
|
||||
local JSON = TSM.Init("Util.JSON")
|
||||
local private = {}
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Module Functions
|
||||
-- ============================================================================
|
||||
|
||||
function JSON.Encode(value)
|
||||
if type(value) == "string" then
|
||||
return "\""..private.SanitizeString(value).."\""
|
||||
elseif type(value) == "number" or type(value) == "boolean" then
|
||||
return tostring(value)
|
||||
elseif type(value) == "table" then
|
||||
local absCount = 0
|
||||
for _ in pairs(value) do
|
||||
absCount = absCount + 1
|
||||
end
|
||||
local tblParts = {}
|
||||
if #value == absCount then
|
||||
for _, v in ipairs(value) do
|
||||
tinsert(tblParts, JSON.Encode(v))
|
||||
end
|
||||
return "["..table.concat(tblParts, ",").."]"
|
||||
else
|
||||
for k, v in pairs(value) do
|
||||
tinsert(tblParts, "\""..private.SanitizeString(k).."\":"..JSON.Encode(v))
|
||||
end
|
||||
return "{"..table.concat(tblParts, ",").."}"
|
||||
end
|
||||
else
|
||||
error("Invalid type: "..type(value))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Private Helper Functions
|
||||
-- ============================================================================
|
||||
|
||||
function private.SanitizeString(str)
|
||||
str = gsub(str, "\124cff[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]([^\124]+)\124r", "%1")
|
||||
str = gsub(str, "[\\]+", "/")
|
||||
str = gsub(str, "\"", "'")
|
||||
return str
|
||||
end
|
||||
Reference in New Issue
Block a user