FirefoxのevalとJSON

先日AutoPagerize の SITEINFO を JSON 化するブックマークレット - IT戦記で取得したJSONFirefoxでevalすると問題なく評価されるのですが、それをperlに流し込んでもPHPに流し込んでもエラーが出るのでtwitterにぼやいたらTwitter / TOYAMA Nao: @ku よくあるミスとしては、メンバ名を二重引用符でく...と助言いただいたのでちょっとためしてみました。

perl

#!/usr/bin/perl
use JSON;
jsonToObj( q| {"name": "ku"} | ); #OK
jsonToObj( q| {'name': "ku"} | ); #NG
jsonToObj( q| { name : "ku"} | ); #NG
jsonToObj( q|({"name": "ku"})| ); #NG

PHP

json_decode(' {"name": "ku"}' ); #OK
json_decode(" {'name': \"ku\"}" ); #NG
json_decode(' { name : "ku"}' ); #NG
json_decode('({"name": "ku"})'); #NG

結論

Firefox上のevalはjsonパーサではなくてjavascriptの式を評価するもの。だからJSONの外の ( ) みたいな演算子も通る。JSONの仕様の中にはかっこは含まれない。混同してました。