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
[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() | - | + |