2006-03-18のコメント欄において、dk2さんにご指摘いただいたのですが、僕はJSONの構文を間違えていました。自分だけ思い違いしていたのならまだいいのだけど、間違えたJSONデータの事例を垂れ流してしまったよ、ごめんなさい。
勘違いしていた箇所は、名前・値ペアの名前のところで、名前も二重引用符で囲まないとダメです。僕は裸の名前を使っていました。例えば、name:"板東トン吉"
はダメで、"name":"板東トン吉"
が正しい構文となります。
「セキュリティの観点からは、JSONパーザーを使ったほうがいい」とか言いながら、僕自身はevalで済ませてたいので、裸の名前もエラーにならずにいたんですね。二重引用符は「用心のため」かと思っていました。どうにも迂闊でした。申し訳ありません。
念のため、JSONの構文を普通の(割とよくある形の)BNFで書いておきます。1つの定義を複数行で書くので、定義の最後にセミコロンを付けています
object ::=
'{' '}'
| '{' members '}' ;members ::=
string ':' value
| members ',' string ':' value ;array ::=
'[' ']'
| '[' elements ']' ;elements ::=
value
| elements ',' value ;value ::=
string
| number
| object
| array
| ('true' | 'false')
| 'null' ;
membersの定義に注目。stringは二重引用符を使った文字列リテラル、numberは整数または実数(浮動小数点数)リテラルです。