After a lot of work, we're ready to provide a more sensible data layout for format=json results (and also format=php). You can enable this in your requests by adding "&formatversion=2", but do note that the output formatting isn't entirely stable yet and might change without warning.

Without specifying formatversion=2, things should be backwards-compatible. But there are some caveats:
  • Modules that were previously outputting raw booleans in JSON may now have those properties being output using the standard convention: empty-string for true and absent for false. Instances of this should be reported in Phabricator to be fixed, please tag with #MediaWiki-API and the tag for the relevant extension.
  • format=xml will now reversibly mangle tag and attribute names that are not valid XML, instead of just outputting invalid XML.
  • Previously-announced breaking changes to log entry parameter formatting, that are not actually part of this general result formatting change but were made at about the same time.
With formatversion=2, we can make some useful changes:
  • Return booleans as boolean true instead of empty-string. Where appropriate,[1] return boolean false instead of omitting the property.
  • Return empty objects in JSON as {}, rather than [].
  • Have action=query's "pages" be an array, instead of an object with page ids as keys that can be difficult to iterate.
  • Provide useful property names instead of '*'.
  • Eliminate useless indirection, e.g. {"text":"..."} instead of {"text":{"*":"..."}} and {"key1":"value1","key2":"value2"} instead of [{"name":"key1","*":"value1"},{"name":"key2","*":"value2"}].
If you see missed opportunities to make the above changes in existing formatversion=2 output, or if there are other changes that would make API output easier to use in JSON, please let me know! Phabricator would be ideal (tag with #MediaWiki-API, and the appropriate extension's tag if applicable), or reply on the mediawiki-api mailing list.

Thanks.


 [1]: Where the property is usually false, it's sometimes just bloat to include it.


--
Brad Jorsch (Anomie)
Software Engineer
Wikimedia Foundation