나는 같은 물건을 끈으로 묶고있다. {'foo': 'bar'}
문자열을 객체로 되돌릴 수있는 방법은 무엇입니까?
나는 같은 물건을 끈으로 묶고있다. {'foo': 'bar'}
문자열을 객체로 되돌릴 수있는 방법은 무엇입니까?
답변:
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거의 oposites하고, "보통"이런 종류의 작동합니다 :
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 SPEC
{ bar:"bar" }프로토 타입 의 문자열이 문자열이 아니라 변수 이므로 유효한 json으로 간주되지 않는다는foo 것입니다. 유효한 json은 key이어야합니다 string.
JSON.parse. 제대로 처리하지 못하는 많은 사례가 있음을 경고합니다. 순수한 원시 데이터 (클래스, 프로토 타입 없음)를 사용하고 JSON에서 지원하는 데이터 유형 (날짜, XML, HTML 등 없음)을 사용하고 있다면 괜찮습니다.
X = { foo:"bar" }와 동일 X = { "foo":"bar" }동일로되는 X = {}; X.foo = "bar"것과 같은 어떤 X={}; X["foo"] = "bar"생성 된 오브젝트 4의 경우와 동일하다. 생성 된 JSON의 유효성에는 차이가 없습니다.
http://jsbin.com/tidob/1/edit?js,console,output
기본 JSON 객체에는 두 가지 주요 방법이 있습니다.
1. JSON.parse()
2. JSON.stringify()
이 JSON.parse()메소드는 JSON 문자열을 구문 분석합니다. 즉, 원래 JavaScript 오브젝트 재구성
var jsObject = JSON.parse(jsonString);
JSON.stringify () 메서드는 JavaScript 객체를 허용하고 해당 JSON을 반환합니다.
var jsonString = JSON.stringify(jsObject);
사용하는 것이 좋습니다 JSON.parse
당신이 할 수있는 대안이 있습니다 :
var myObject = eval('(' + myJSONtext + ')');
이것 좀 봐.
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);
$("#save").click(function () {
debugger
var xx = [];
var dd = { "firstname": "", "lastname": "", "address": "" };
var otable1 = $("#table1").dataTable().fnGetData();
for (var i = 0; i < otable1.length; i++) {
dd.firstname = otable1[i][0];
dd.lastname = otable1[i][1];
dd.address = otable1[i][2];
xx.push(dd);
var dd = { "firstname": "", "lastname": "", "address": "" };
}
JSON.stringify(alert(xx));
$.ajax({
url: '../Home/save',
type: 'POST',
data: JSON.stringify({ u: xx }),
contentType: 'application/json;',
dataType: 'json',
success: function (event) {
alert(event);
$("#table2").dataTable().fnDraw();
location.reload();
}
});
});
{foo: 'bar'}(유효한 자바 스크립트 표현 동안) 유효 JSON 없습니다.