Documentation for this module may be created at Module:JSON arguments/doc

-- Returns the frame's passed arguments as a JSON object, used for reusing
-- data between a parent and child template.

-- You are meant to invoke this in a template without parameters.

local getArgs = require('Module:Arguments').getArgs
local p = {}

function p.main(frame)
	local args = getArgs(frame, {
		trim = true,
		removeBlanks = false
	})

    return p._main(frame, args)
end

function p._main(frame, args)
	local finalArgs = {}
	local exclude = {}
	
	for v in mw.ustring.gmatch(args["exclude"] or "", "[^,]+") do
		table.insert(exclude, v)
	end
	
	for k, v in pairs(frame:getParent().args) do
		local excluded = false
		for _, ev in pairs(exclude) do
			if ev == k then
				excluded = true
			end
		end
		if not excluded then
			finalArgs[k] = v
		end
	end
	
	return mw.text.jsonEncode(finalArgs)
end

return p