2012-06-17 3 views
1

이전에 eval()을 사용 해본 적이 없으므로 구문 오류가 있다고 가정합니다. 다음으로 잘못의 새로운 기능 : 그것은 작동하지 않는 것 때문에평가가 작동하지 않습니다 - JavaScript

var JSONAsString = '{"item1":"one", "item2":"two", "item3":"three"}'; 
var JSONAsObject = eval(JSONString); 
alert(JSONAsObject.item1); 

- 내가 페이지를로드하고 아무 일도 발생하지 않습니다.

예, 저는 eval을 사용하면 안된다는 것을 알고 있습니다. JSON.parse()의 구문이 eval ... right의 구문과 같다고 가정합니다. 그렇다면 (코드를 수정 한 후) eval을 JSON.parse로 대체하면 여전히 동일한 작업을 수행 할 수 있습니까?

+0

'JSONString' 대'JSONAsString', 'JSONAsObject' 대'JSONObject' - 변수 이름이 잘못되었습니다. 게다가 구문 분석/평가 후 JSON이 아니라 JavaScript 객체이므로 JSONObject는 적합하지 않습니다. – ThiefMaster

+0

변수 이름이 정확하다고 가정하면 '{...}'가 * 블록 *으로 해석되고 객체 리터럴로 해석되지 않으므로 문자열 평가 결과는 구문 오류가됩니다. –

+0

@ThiefMaster - 그게 바로 * (*) 객체 인 JSON *입니다. – Bluefire

답변

5

당신이 ()에서 JSON을 포장 할 필요가 eval를 사용하여 :

var JSONAsString = '{"item1":"one", "item2":"two", "item3":"three"}'; 
var JSONAsObject = eval('(' + JSONAsString + ')'); 
alert(JSONAsObject.item1); 

그러나, 당신이 바로 시작에서 JSON.parse()를 사용뿐만 아니라 나중에한다. 그렇지 않으면 유효한 JavaScript 일 가능성이있는 잘못된 JSON이 작동하지만 JSON.parse으로 전환 할 때 작동하지 않을 수 있습니다.

JSON.*을 사용하는 경우 이전 브라우저에 기본 JSON 지원이 없으므로 json2.js을 포함해야합니다.

+0

Aah, thanks! 그것은 변수에 넣은 다음'eval()'또는 JSON을 사용하여 구문 분석하는 모든 코드에 적용됩니까? – Bluefire

+0

'JSON.parse()'를 사용하고 나머지는 잊어 버리십시오. – MaxArt

+0

@MaxArt는 무엇을 말합니다. 그러나 어떤 경우에도, * 표현식을 eval()하면 그 문장이 * 문장 *으로 평가되지 않도록하기 위해'()'를 원할 것입니다. – ThiefMaster

3

JSON을 구문 분석하는 데 eval()을 사용하지 마십시오. 브라우저 간 지원, 성능 및 보안을 제공하는 Douglas Crockfords json2를 사용하십시오. https://github.com/douglascrockford/JSON-js

관련 문제