나는 같은 물건을 끈으로 묶고있다. {'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 없습니다.