通过 Sulfur.wiki 可快速访问本维基!
本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~

全站通知:

模块:JSONFetcher/沙盒

来自火湖WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:JSONFetcher/沙盒/doc创建

local p = {}
local json = mw.text.jsonDecode

-- 获取 JSON 数据
function p.getData(frame)
    local jsonPage = '火湖:物品数据.json' -- 数据页面路径
    
    local content = mw.title.new(jsonPage):getContent()
    if not content then
        return "无法获取数据"
    end

    local data = json(content)
    if not data then
        return "数据格式错误"
    end

    return data
end

-- 获取嵌套值,支持 ! 分隔符和数组索引
function p.fetch(frame)
    -- 获取调用参数
    local key = frame.args[1]

    local data = p.getData(frame)
    if type(data) == "string" then
        return data -- 如果出错,直接返回错误信息
    end

    if not key then
        return "未指定参数"
    end

    -- 解析键,支持 ! 分隔符来进行索引
    local function getNestedValue(data, key)
        for part in key:gmatch("[^!]+") do
            part = part:match("^%s*(.-)%s*$") -- 去掉前后空格
            if type(data) == "table" then
                local index = tonumber(part)
                if index then
                    data = data[index]
                else
                    data = data[part] or data["." .. part]
                end
            else
                return nil
            end
        end
        return data
    end

    -- 获取嵌套数据
    local value = getNestedValue(data, key)
    if value == nil then
        return nil
    end

    -- 生成返回值
    local result
    if type(value) == "table" then
        local keys = {}
        for k, _ in pairs(value) do
            if not tostring(k):match("^%?_") then
                table.insert(keys, k)
            end
        end
        result = table.concat(keys, ", ")
    else
        result = tostring(value)
    end

    return result
end

return p