JSONに関する注意点

職場で、JSONを返すAPIで値が無い/必要ないって時に何を返すべきかという話題がチラホラとあがります。
「trueとかってJSONなの?」って質問に自信満々で「はいJSONです!」「nullも文字列リテラルJSONです!」とおまけ付きで即答したものの、不安になってRFCにあたったら間違えてました。


http://www.ietf.org/rfc/rfc4627.txt
ここの 2. JSON Grammar のBNFを見ると

A JSON text is a serialized object or array.
JSON-text = object / array

ってハッキリ書いてあります。
nodeの JSON.parseとかがパースできちゃうので勘違いしてました。
http://jsonlint.com/
ここにnullとか入れても正しく失敗します。


その他、ありがちなミスについては
http://d.hatena.ne.jp/m-hiyama/20080728/1217205390
檜山さんトコを参照スべし。


しかしそれにしても、HTTPに乗ったJSON
Content-Length: 0
Content-Type: application/json
が正しいのか、正しい場合どう取り扱うべきなのかは謎のママ。

追記

多くのパーサーが対応していたり、Facebookなどの大きなサービスがboolean等を使っていたりする以上、拡張JSONとして認めた方がいいのかもしれません。