Requests for comment/More compact JSON API output
More compact JSON API output | |
---|---|
Component | General |
Creation date | |
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) |
Problem
editSample 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
editI 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
editParser | Unquoted keys | Unescaped UTF-8 |
---|---|---|
JS eval() | + | + |
jQuery.parseJSON() | - | + |
PHP json_decode() | - | + |