Cha*_*ell 472
你需要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);
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*son 59
JSON.stringify
并且JSON.parse
几乎是对手,并且"通常"这种事情会起作用:
var obj = ...;
var json = JSON.stringify(obj);
var obj2 = JSON.parse(json);
Run Code Online (Sandbox Code Playgroud)
所以obj和obj2是"相同的".
但是要注意一些限制.当你处理简单的对象时,这些问题通常都不重要.但是我将在这里使用这个辅助函数来说明其中的一些:
function jsonrepack( obj ) { return JSON.parse(JSON.stringify(obj) ); }
Run Code Online (Sandbox Code Playgroud)
你只会获得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
Run Code Online (Sandbox Code Playgroud)你将失去身份:
var o = {};
var oo = jsonrepack(o);
console.log( o === oo ); // false
Run Code Online (Sandbox Code Playgroud)功能不存在:
jsonrepack( { f:function(){} } ); // Returns {}
Run Code Online (Sandbox Code Playgroud)日期对象最终为字符串:
jsonrepack(new Date(1990,2,1)); // Returns '1990-02-01T16:00:00.000Z'
Run Code Online (Sandbox Code Playgroud)未定义的值不存在:
var v = { x:undefined }
console.log("x" in v); // true
console.log("x" in jsonrepack(v)); // false
Run Code Online (Sandbox Code Playgroud)提供toJSON
功能的对象可能无法正常运行.
x = { f:"foo", toJSON:function(){ return "EGAD"; } }
jsonrepack(x) // Returns 'EGAD'
Run Code Online (Sandbox Code Playgroud)我确信其他内置类型也存在问题.(所有这些都是使用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
Run Code Online (Sandbox Code Playgroud)
推荐使用 JSON.parse
你可以做一个替代方案:
var myObject = eval('(' + myJSONtext + ')');
Run Code Online (Sandbox Code Playgroud)
这个怎么样
var parsed = new Function('return ' + stringifiedJSON )();
Run Code Online (Sandbox Code Playgroud)
这是一个更安全的替代方案eval
.
var stringifiedJSON = '{"hello":"world"}';
var parsed = new Function('return ' + stringifiedJSON)();
alert(parsed.hello);
Run Code Online (Sandbox Code Playgroud)
http://jsbin.com/tidob/1/edit?js,console,output
本机JSON对象包括两个关键方法.
1. JSON.parse()
2. JSON.stringify()
Run Code Online (Sandbox Code Playgroud)
该JSON.parse()
方法解析JSON字符串 - 即重建原始JavaScript对象
var jsObject = JSON.parse(jsonString);
JSON.stringify()方法接受JavaScript对象并返回其JSON等效项.
var jsonString = JSON.stringify(jsObject);
归档时间: |
|
查看次数: |
224265 次 |
最近记录: |