Requests for comment/More compact JSON API output

From MediaWiki.org
Jump to navigation Jump to search
Request for comment (RFC)
More compact JSON API output
Component General
Creation date 2012-02-13
Author(s) MaxSem
Document status declined
This was superseded by the "utf8" parameter which was added in March 2013 by Kevin Israel (79f80cc49571e286b89fc1666c034262611fac7f) -- Tim Starling (talk) 03:34, 18 September 2013 (UTC)
General2012-02-13MaxSemThis was superseded by the "utf8" parameter which was added in March 2013 by Kevin Israel (79f80cc49571e286b89fc1666c034262611fac7f) -- Tim Starling (talk) 03:34, 18 September 2013 (UTC)

Problem[edit]

Sample piece of action=parse output on zhwiki: <b>\u5973\u6027<\/b>\u662f\u6307<a href=\"\/wiki\/%E9%9B%8C%E6%80%A7\" title=\"\u96cc\u6027\">\u96cc\u6027<\/a>\u7684<a href=\"\/wiki\/%E4%BA%BA\" title=\"\u4eba\">\u4eba\u985e<\/a>\uff0c\u8207<a href=\"\/wiki\/%E7%94%B7%E6%80%A7\" title=\"\u7537\u6027\">\u7537\u6027<\/a>\uff0c\u4e5f\u5c31\u662f<a href=\"\/wiki\/%E9%9B%84%E6%80%A7\" title=\"\u96c4\u6027\">\u96c4\u6027<\/a>\u4eba\u985e\u6210\u5c0d\u6bd4\u3002\u5973\u6027\u9019\u500b\u540d\u8a5e\u662f\u7528\u4f86\u8868\u793a<a href=\"\/wiki\/%E7%94%9F%E7%89%A9%E5%AD%A6\" title=\"\u751f\u7269\u5b66\">\u751f\u7269\u5b78<\/a>

And list=allpages query on en:

{
	"pageid": 5878274,
	"ns": 0,
	"title": "!"
},
{
	"pageid": 3632887,
	"ns": 0,
	"title": "!!"
},
{
	"pageid": 600744,
	"ns": 0,
	"title": "!!!"
},

We can see that even though it is a valid JSON, it is bulky if compared to what JavaScript aloows it to be.

Proposed solution[edit]

I propose to add a new format, jsoncompact, or, for compactness, jsonc, whose output should be much shorter for some use cases as the price of being a valid JavaScript but not necessarily valid JSON. A few things that can be done:

  • Example 1, don't escape Unicode: {"foo":"\u043f\u0440\u0435\u0432\u0435\u0434"}{"foo":"превед"} (24 bytes less).
  • Example 2, don't quote keys if possible: {"foo":"bar"}{foo:"bar"} (2 bytes less).

The second example is much less tolerated by different parsers so I'm not proposing to use it, though even it can save 3000 bytes

Compatibility matrix[edit]

Parser Unquoted keys Unescaped UTF-8
JS eval() + +
jQuery.parseJSON() - +
PHP json_decode() - +