私は{'foo': 'bar'}
のようなオブジェクトをstringyfingしています
文字列をオブジェクトに戻す方法は?
あなたは JSON.parse()
文字列をする必要があります。
var str = '{"hello":"world"}';
try {
var obj = JSON.parse(str); // this is how you parse a string into JSON
document.body.innerHTML += obj.hello;
} catch (ex) {
console.error(ex);
}
JSON.parse
はJSON.stringify
の逆です。
JSON.stringify
とJSON.parse
はほぼ正反対であり、「通常」この種のことはうまくいきます。
var obj = ...;
var json = JSON.stringify(obj);
var obj2 = JSON.parse(json);
したがって、objとobj2は「同じ」です。
ただし、注意が必要な制限がいくつかあります。単純なオブジェクトを扱うときには、これらの問題は重要ではありません。しかし、このヘルパー関数を使って、それらのいくつかをここで説明します。
function jsonrepack( obj ) { return JSON.parse(JSON.stringify(obj) ); }
オブジェクトのownProperties
を取得してプロトタイプを失うだけです。
var MyClass = function() { this.foo="foo"; }
MyClass.prototype = { bar:"bar" }
var o = new MyClass();
var oo = jsonrepack(o);
console.log(oo.bar); // undefined
console.log( oo instanceof MyClass ); // false
あなたはアイデンティティを失うでしょう:
var o = {};
var oo = jsonrepack(o);
console.log( o === oo ); // false
関数は生き残らない:
jsonrepack( { f:function(){} } ); // Returns {}
日付オブジェクトは文字列として終わります。
jsonrepack(new Date(1990,2,1)); // Returns '1990-02-01T16:00:00.000Z'
未定義の値は存続しません。
var v = { x:undefined }
console.log("x" in v); // true
console.log("x" in jsonrepack(v)); // false
toJSON
関数を提供するオブジェクトは正しく動作しないかもしれません。
x = { f:"foo", toJSON:function(){ return "EGAD"; } }
jsonrepack(x) // Returns 'EGAD'
他の組み込み型にも問題があると思います。 (これはすべてnode.jsを使ってテストされたので、あなたの環境によっては少し異なる振る舞いをするかもしれません)。
問題になる場合は、JSON.parse
とJSON.stringify
の追加パラメータを使用して克服することができます。例えば:
function MyClass (v) {
this.date = new Date(v.year,1,1);
this.name = "an object";
};
MyClass.prototype.dance = function() {console.log("I'm dancing"); }
var o = new MyClass({year:2010});
var s = JSON.stringify(o);
// Smart unpack function
var o2 = JSON.parse( s, function(k,v){
if(k==="") {
var rv = new MyClass(1990,0,0);
rv.date = v.date;
rv.name = v.name;
return rv
} else if(k==="date") {
return new Date( Date.parse(v) );
} else { return v; } } );
console.log(o); // { date: <Mon Feb 01 2010 ...>, name: 'an object' }
console.log(o.constructor); // [Function: MyClass]
o.dance(); // I'm dancing
console.log(o2); // { date: <Mon Feb 01 2010 ...>, name: 'an object' }
console.log(o2.constructor) // [Function: MyClass]
o2.dance(); // I'm dancing
JSON.parse
を使用することをお勧めします
あなたがすることができる代替手段があります:
var myObject = eval('(' + myJSONtext + ')');
これはどう
var parsed = new Function('return ' + stringifiedJSON )();
これはeval
のより安全な代替策です。
var stringifiedJSON = '{"hello":"world"}';
var parsed = new Function('return ' + stringifiedJSON)();
alert(parsed.hello);
http://jsbin.com/tidob/1/edit?js,console,output
ネイティブJSONオブジェクトには2つの重要なメソッドがあります。
1. JSON.parse()
2. JSON.stringify()
JSON.parse()
メソッドはJSON文字列を解析します - つまり元のJavaScriptオブジェクトを再構築します
var jsObject = JSON.parse(jsonString);
JSON.stringify()メソッドはJavaScriptオブジェクトを受け入れて、それと等価のJSONを返します。
var jsonString = JSON.stringify(jsObject);
これをチェックしてください。
http://jsfiddle.net/LD55x/
コード:
var myobj = {};
myobj.name="javascriptisawesome";
myobj.age=25;
myobj.mobile=123456789;
debugger;
var str = JSON.stringify(myobj);
alert(str);
var obj = JSON.parse(str);
alert(obj);