JSON.parseでかなり悩んだ件

まず、html内の要素からデータを取得して配列化しようとしたんです。
なんでそんなことするかって言うと、
AjaxのXHRでページ読み込んだ時、JavaScript自身は再読込みされないので、
htmlのinputのhiddenのvalueにデータをセットして、
そこを可変的にして読み込むことで、対応しようとした訳です。

んで、Perlの多次元配列をData::Dumperで整形かけて、
そのデータ文字列をJavaScriptに渡して使おうとしたのです。
じゃあそれをどうやってJavaScriptで配列に戻すの?
ってなったらJSONが使えるな、と思ったわけですよ。
で、色々実験したらかなり面倒だったって話です。

結論から言うとJSON.parseで文字列を配列に出来るわけなんですが、
これがメチャクチャ厳密に書かないといけないんです。
evalに逃げようかと思ったんですが、危険危険でやっぱり怖い。
んで、かなり頑張って多次元配列文字列をなんとか格納できました。

1.文字列要素は必ずダブルクォーテーションで囲む
  シングルクォーテーションは許容されない

2.要素末尾のカンマは許容されない

3.空白は無視される(つまり詰めれば良し)

4.多次元配列の文字列形式は以下の通り

  上記形式の値を変数に入れた場合はそのまま、
  検証時等で文字列をそのままparseする場合は
  全体をシングルクォーテーションで囲む必要がある

5.inputのvalue値とする時は、値をシングルクォテーションで囲むしかない

JSON使っている人からすれば当たり前なのかもしれませんが、
JS本体やperl等に比べるとかなり厳密です。
少し狂っただけでも絶対許容されません。
まぁプログラムのあり方としては正しいとは思います。
ただ、かなり検証が面倒だったので疲れました。

同じような事する人は多分最低一回はエラー吐かれると思います。
根気よく検証すれば出来ると思うので頑張りましょう。
JS側でサンプル配列作ってJSONの文字列化(stringify)して、
比較して形式が一致するかとか、
アラートに入れて期待通りの文字列になってるかとか確認しましょう。

とりあえずevalは遅いし危険らしいし、
JSON.parseはnativeJSで早いし安全だし、
なるべくJSON.parseを使うようにしましょう。

コメント(名前のみの入力でコメント可能です)