SOFTELメモ

</> 技術者募集

【Javascript】JSONをeval()する

JSON形式の文字列をオブジェクトにしたいとき

eval("var x = " + json)

としてみたり

var x = eval("(" + json + ")")

としてみたりが可能です。

前者は x に代入する式を eval で評価させています。
後者はJSON形式文字列を評価して、evalはその結果を返し、それを x に格納しています。

どちらでもよいですが、後者の方がおしゃれかなという感じです。
jQueryやprototype.jsなどで見られる書き方です。

eval(“(” + json + “)”) の 括弧って何なんだというと、
eval({a:1,b:2})と書くとブロックステートメントとみなされて、期待した動作になりません。

{a:1,b:2} を式として評価して欲しいので ({a:1,b:2}) にしてから eval(({a:1,b:2})) → 戻り値がオブジェクト、ですね。

スクリプト中に、いきなり{a:1,b:2}なんて書いたら確かに意味不明ですもんね。
{1}なら、(動作にまったく影響しないですが)文法上の間違いはなくて、eval(“{1}”)は数値の1が返ってきます。これも残念ながらオブジェクトは返ってきません。

関連するメモ

コメント