開発部だより 第306回
JavaScriptの文字列からオブジェクト型配列に変換する方法を調べていました。
いくつか方法がありますが、どれも微妙に違うのでちょっとまとめてみます。
◆eval()で評価する
var str = '{a:"json"}';
var obj = eval(str);
alert(obj);
真っ先に思いついたこの方法ですが、'{a:"json", b:"freddy"}'と要素が複数になると使えないという制限があります。evalの危険性の問題はおいておくとしても使い所は限られてしまいます。
◆JSON.parseを使用する
JSON文字列をJavaScriptオブジェクトに変換する専用の命令です。
ECMAScript 5.1で定義されて現在のブラウザーならほぼ使用できます。
var str = '{"a":"json", "b":"freddy"}';
var obj = JSON.parse(str);
alert(obj.a);
jQueryの、$.parseJSON(str);を使用しても同じです。
これならオブジェクトが複数になっても問題ありませんし、次のようにオブジェクトを入れ子にすることもできます。
var str = '{"x": {"a":"json", "b":"freddy"}, "y": {"a":"damian", "b":"chucky"}}';
ただ条件としてプロパティもダブルクォーテーションで囲わなければいけないし、シングルクォーテーションではエラーになるのでそこは注意が必要です。
◆もう一つありました「JSONらしき文字列をオブジェクトに変換するJavaScript」
var str = '{a:"json", b:"freddy"}';
var obj = (new Function("return " + str))();
この方法ならオブジェクトが複数でも問題ありませんし、プロパティをダブルクォーテーションで囲わなくてもOKです。ただこの方法は基本的にeval()と同じなので少し注意が必要です。
どうやらどの方法もどれも一長一短のようなので、状況によって使い分ける必要がありそうです。
型変換というと文字列型を数値型("01" ⇒ 1)のような使い方が普通だと思いますが、jsonがオブジェクトになるような融通のきくところはJavaScriptのいいところですね。