通过 Sulfur.wiki 可快速访问本维基!
本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~
编辑帮助:目录 • BWIKI反馈留言板
通过 Sulfur.wiki 可快速访问本维基!
本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~
模块:JSONFetcher/沙盒
此模块的文档可以在模块: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