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])
if m.root[frame.args[2]] ~= nil then
-- Function to split the key by "."
if type(m.root[frame.args[2]]) == "table" then
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 = ""
local str = ""
for k,v in pairs(m.root[frame.args[2]]) do
for k,v in pairs(value) do
str = str .. v .. ";"
str = str .. v .. ";"
end
end
return str
return str
end
end
return m.root[frame.args[2]]
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