<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.iccup.org/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AJson</id>
	<title>Модуль:Json - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.iccup.org/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AJson"/>
	<link rel="alternate" type="text/html" href="https://wiki.iccup.org/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Json&amp;action=history"/>
	<updated>2026-05-31T18:53:56Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.iccup.org/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Json&amp;diff=164&amp;oldid=prev</id>
		<title>DarkMuse: Новая страница: «--- -- @iCCup -- wiki=commons -- page=Module:Json -- -- Please see https://github.com/iCCup/Lua-Modules to contribute --  local Json = {}  local Arguments = require(&#039;Module:Arguments&#039;) local Table = require(&#039;Module:Table&#039;)  ---Json-stringifies all arguments from a supplied frame. ---@param frame Frame ---@return string function Json.fromArgs(frame) 	local args = Arguments.getArgs(frame) 	return Json.stringify(args) end  ---Json-stringifies a given table. ---...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.iccup.org/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Json&amp;diff=164&amp;oldid=prev"/>
		<updated>2024-08-31T21:49:29Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «--- -- @iCCup -- wiki=commons -- page=Module:Json -- -- Please see https://github.com/iCCup/Lua-Modules to contribute --  local Json = {}  local Arguments = require(&amp;#039;Module:Arguments&amp;#039;) local Table = require(&amp;#039;Module:Table&amp;#039;)  ---Json-stringifies all arguments from a supplied frame. ---@param frame Frame ---@return string function Json.fromArgs(frame) 	local args = Arguments.getArgs(frame) 	return Json.stringify(args) end  ---Json-stringifies a given table. ---...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;---&lt;br /&gt;
-- @iCCup&lt;br /&gt;
-- wiki=commons&lt;br /&gt;
-- page=Module:Json&lt;br /&gt;
--&lt;br /&gt;
-- Please see https://github.com/iCCup/Lua-Modules to contribute&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local Json = {}&lt;br /&gt;
&lt;br /&gt;
local Arguments = require(&amp;#039;Module:Arguments&amp;#039;)&lt;br /&gt;
local Table = require(&amp;#039;Module:Table&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
---Json-stringifies all arguments from a supplied frame.&lt;br /&gt;
---@param frame Frame&lt;br /&gt;
---@return string&lt;br /&gt;
function Json.fromArgs(frame)&lt;br /&gt;
	local args = Arguments.getArgs(frame)&lt;br /&gt;
	return Json.stringify(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Json-stringifies a given table.&lt;br /&gt;
---@param obj table&lt;br /&gt;
---@param options? {pretty: boolean?, asArray: boolean?}&lt;br /&gt;
---@return string&lt;br /&gt;
---@overload fun(obj: any, options: table?): any&lt;br /&gt;
function Json.stringify(obj, options)&lt;br /&gt;
	if type(obj) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return obj&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	if options.pretty or options.asArray then&lt;br /&gt;
		return mw.text.jsonEncode(obj, options.pretty and mw.text.JSON_PRETTY or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Using MediaWiki&amp;#039;s jsonEncode directly instead of Liquipedia-specific function&lt;br /&gt;
	return mw.text.jsonEncode(obj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Json-stringifies subtables of a given table.&lt;br /&gt;
---@param obj table&lt;br /&gt;
---@param pretty boolean?&lt;br /&gt;
---@return table&lt;br /&gt;
function Json.stringifySubTables(obj, pretty)&lt;br /&gt;
	local objectWithStringifiedSubtables = {}&lt;br /&gt;
	for key, item in pairs(obj) do&lt;br /&gt;
		if type(item) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			objectWithStringifiedSubtables[key] = Json.stringify(item, {pretty = pretty})&lt;br /&gt;
		else&lt;br /&gt;
			objectWithStringifiedSubtables[key] = item&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return objectWithStringifiedSubtables&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Parses a given JSON encoded table to its table representation.&lt;br /&gt;
---If the parse fails it returns an empty table.&lt;br /&gt;
---Second return value boolean indicates a failed parse.&lt;br /&gt;
---@param obj string&lt;br /&gt;
---@return table, boolean&lt;br /&gt;
---@overload fun(obj: any): {}, true&lt;br /&gt;
function Json.parse(obj)&lt;br /&gt;
	local parse = function(object) return mw.text.jsonDecode(object, mw.text.JSON_TRY_FIXING) end&lt;br /&gt;
	local status, res = pcall(parse, obj);&lt;br /&gt;
	if status then&lt;br /&gt;
		return res, false&lt;br /&gt;
	else&lt;br /&gt;
		mw.log(&amp;#039;Error: could not parse Json:&amp;#039;)&lt;br /&gt;
		mw.logObject(obj)&lt;br /&gt;
		mw.log(debug.traceback())&lt;br /&gt;
		return {}, true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Parses a given object if it is a string. Else it returns the given object.&lt;br /&gt;
---@param obj string&lt;br /&gt;
---@return table, boolean&lt;br /&gt;
---@overload fun(obj: any): any&lt;br /&gt;
function Json.parseIfString(obj)&lt;br /&gt;
	if type(obj) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return Json.parse(obj)&lt;br /&gt;
	else&lt;br /&gt;
		return obj&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Attempts to parse a JSON encoded table. Returns nil if unsuccessful.&lt;br /&gt;
---Checks if the given string starts with `&amp;#039;{&amp;#039;` or `&amp;#039;[&amp;#039;`&lt;br /&gt;
---&lt;br /&gt;
---Example: JsonExt.parseIfTable(&amp;#039;{&amp;quot;a&amp;quot; = 3}&amp;#039;) = {a = 3}&lt;br /&gt;
---@param any string&lt;br /&gt;
---@return table?&lt;br /&gt;
---@overload fun(any: any): nil&lt;br /&gt;
function Json.parseIfTable(any)&lt;br /&gt;
	if type(any) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		local firstChar = any:sub(1, 1)&lt;br /&gt;
		if firstChar == &amp;#039;{&amp;#039; or firstChar == &amp;#039;[&amp;#039; then&lt;br /&gt;
			local result, hasError = Json.parse(any)&lt;br /&gt;
			if not hasError then&lt;br /&gt;
				return result&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Parses a given JSON input from a template call to `Json.stringify()`.&lt;br /&gt;
---If the parse fails it returns the original input.&lt;br /&gt;
---Second return value boolean indicates a failed parse.&lt;br /&gt;
---@param any string&lt;br /&gt;
---@return table, boolean&lt;br /&gt;
---@overload fun(any: any): any, true&lt;br /&gt;
function Json.parseStringified(any)&lt;br /&gt;
	local tbl = Json.parseIfTable(any)&lt;br /&gt;
	if not tbl then&lt;br /&gt;
		return any, true&lt;br /&gt;
	end&lt;br /&gt;
	return Table.mapValues(tbl, Json.parseStringified), false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Json&lt;/div&gt;</summary>
		<author><name>DarkMuse</name></author>
	</entry>
</feed>