Module:GetJSON: Difference between revisions
From AlternateWiki
Content added Content deleted
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
local m = {} |
local m = {} |
||
m.root = mw.loadJsonData(frame.args[1]) |
m.root = mw.loadJsonData(frame.args[1]) |
||
⚫ | |||
-- Function to split the key by "." |
|||
⚫ | |||
local function splitKey(key) |
|||
local keys = {} |
|||
for subkey in string.gmatch(key, "([^%.]+)") do |
|||
table.insert(keys, subkey) |
|||
end |
|||
return keys |
|||
end |
|||
-- Function to get the value from the nested table |
|||
local function getValueByKeys(root, keys) |
|||
local value = root |
|||
for _, key in ipairs(keys) do |
|||
if value[key] == nil then |
|||
return nil |
|||
end |
|||
value = value[key] |
|||
end |
|||
return value |
|||
end |
|||
local keys = splitKey(frame.args[2]) |
|||
local value = getValueByKeys(m.root, keys) |
|||
⚫ | |||
⚫ | |||
local str = "" |
local str = "" |
||
for k,v in pairs( |
for k,v in pairs(value) do |
||
str = str .. v .. ";" |
str = str .. v .. ";" |
||
end |
end |
||
return str |
return str |
||
end |
end |
||
return |
return value |
||
else |
else |
||
if frame.args[3] ~= nil then |
if frame.args[3] ~= nil then |
||
Line 20: | Line 45: | ||
end |
end |
||
end |
end |
||
return p |
|||
return p --All modules end by returning the variable containing their functions to Wikipedia. |
|||
-- Now we can use this module by calling {{#invoke: Example | hello }}, |
|||
-- {{#invoke: Example | hello_to | foo }}, or {{#invoke:Example|count_fruit|bananas=5|apples=6}} |
|||
-- Note that the first part of the invoke is the name of the Module's wikipage, |
|||
-- and the second part is the name of one of the functions attached to the |
|||
-- variable that you returned. |
|||
-- The "print" function is not allowed in Wikipedia. All output is accomplished |
|||
-- via strings "returned" to Wikipedia. |
Revision as of 18:28, 15 May 2024
Documentation for this module may be created at Module:GetJSON/doc
local p = {};
p.main = function( frame )
local m = {}
m.root = mw.loadJsonData(frame.args[1])
-- Function to split the key by "."
local function splitKey(key)
local keys = {}
for subkey in string.gmatch(key, "([^%.]+)") do
table.insert(keys, subkey)
end
return keys
end
-- Function to get the value from the nested table
local function getValueByKeys(root, keys)
local value = root
for _, key in ipairs(keys) do
if value[key] == nil then
return nil
end
value = value[key]
end
return value
end
local keys = splitKey(frame.args[2])
local value = getValueByKeys(m.root, keys)
if value ~= nil then
if type(value) == "table" then
local str = ""
for k,v in pairs(value) do
str = str .. v .. ";"
end
return str
end
return value
else
if frame.args[3] ~= nil then
return frame.args[3]
else
return ""
end
end
end
return p