bugfix1001.2

星引擎Party已发行!
欢迎来到Star Engine 星引擎 WIKI
点击成为魔法少女!

全站通知:

模块:JSON

来自星引擎WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块: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