模块:JSON
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:JSON/doc创建
-- Module:Json(简化版)
local p = {}
-- 序列化:Lua数据 → JSON字符串
function p.encode(data)
local t = type(data)
if t == "nil" then
return "null"
elseif t == "boolean" then
return data and "true" or "false"
elseif t == "number" then
return tostring(data)
elseif t == "string" then
-- 转义特殊字符(双引号、换行等)
return '"' .. data:gsub('["\\]', '\\%1'):gsub('\n', '\\n') .. '"'
elseif t == "table" then
local isArray = true
local keys = {}
for k in pairs(data) do
if type(k) ~= "number" or k < 1 or math.floor(k) ~= k then
isArray = false
break
end
table.insert(keys, k)
end
if isArray then
table.sort(keys)
local elements = {}
for _, k in ipairs(keys) do
table.insert(elements, p.encode(data[k]))
end
return "[" .. table.concat(elements, ",") .. "]"
else
local keyValuePairs = {}
for k, v in pairs(data) do
table.insert(keyValuePairs, p.encode(k) .. ":" .. p.encode(v))
end
return "{" .. table.concat(keyValuePairs, ",") .. "}"
end
else
error("不支持的类型:" .. t)
end
end
-- 反序列化:JSON字符串 → Lua数据(简化版,仅支持基本类型)
function p.decode(str)
-- 实际实现需处理语法解析,这里省略复杂逻辑(可参考社区成熟模块)
-- 简易版可使用 mw.text.jsonDecode(部分MediaWiki版本支持)
return mw.text.jsonDecode(str)
end
return p

沪公网安备 31011002002714 号