【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が返ってきます。これも残念ながらオブジェクトは返ってきません。
コメント