2014-09-17 2 views
0

내 문제는 (기본적으로 문자열로 표시된 객체) 구문 분석에 매우 긴 문자열을 가지고 있으며, eval을 사용하지 않고 수동으로 구문 분석하려고 시도하고 있으며, 1000 개 이상의 회 돌이 함수가 있고, 알고리즘을 완료하기 위해 가까이 있지도 않습니다.자바 스크립트에서 eval을 사용해야합니까?

jQuery.metadata에서이 작업이 어떻게 수행되었는지 확인 중이며 eval을 사용했습니다. 내 1000 줄의 코드는 단지 평가로 축소 될 수 있지만이 안전합니까? 나는이 기능이 빠르지도 안전하지도 않다는 말을 들었지만 내 알고리즘은 모든 루프와 구문 분석을 고려해 볼 때 속도가 느리다.

<button onajax="{reload:'#someitem',callback: function('somedata'),items:{1,2,3}}"> 

나는 당신이 그때 더 나은 귀하의 질문에 대답 할 수 무엇을하려고에 조금 더 많은 정보를 제공 할 수있는 경우

var onajaxargs = {reload:'#someitem',callback: function('somedata'),items:{1,2,3}}; 
+3

해당 개체가 JSON 문자열로 표시되면 JSON.parse()를 사용하는 것이 좋습니다. –

+0

@Roman Hocke : "{action : doSomething ('some data')} '와 같은 문자열을 구문 분석하겠습니까? JSON에 익숙하지 않아서 미안합니다. – Felishia

+2

아니요. 따라서 문자열은 JSON이 아닙니다. 알아두면 좋을 것입니다. 호기심을 위해서 : 그 문자열은 어디에서 왔습니까? –

답변

1

을 설정해야하지만, 로마 말했듯이, JSON은 보인다 문자열을 파싱하는 가장 좋은 방법이 될 수 있습니다. 당신이 이미하지 않은 경우 Parse JSON in JavaScript?

0

Why is using the JavaScript eval function a bad idea?를 참조하십시오

이 꽤 잘 JSON.parse()를 사용하는 방법에 대해 설명합니다.

첫 번째 JSON 인코딩 방법을 사용하고 기능 멤버를 "되살리는"방법을 제안합니다. http://ovaraksin.blogspot.com/2013/10/pass-javascript-function-via-json.html

jsonText='{"reload":"#someitem","callback": "function(somedata) {alert(somedata)}","items":[1,2,3]}'; 

var jsonTransformed = JSON.parse(jsonText, function (key, value) { 
     if (value && (typeof value === 'string') && value.indexOf("function") === 0) { 
      // we can only pass a function as string in JSON ==> doing a real function 
      var jsFunc = new Function('return ' + value)(); 
      return jsFunc; 
     } 

     return value; 
}); 

몇 가지 관찰 : - 회원의 모든 문자열과 이름은 큰 따옴표로 묶어야하는

  1. 당신은 작동하는지 확인하기 위해 표준 JSON이 필요합니다.
  2. 문자열에서 따옴표 (단일 및 이중)를 올바르게 이스케이프 처리해야합니다.
  3. 함수 멤버가 문자열 "function"텍스트를 포함하도록 문자열의 시작 부분에 만들어야합니다.
  4. 배열 구성원은 대괄호로 묶어야하며 원래 게시물과 같이 중괄호로 묶지 않아야합니다.
+0

미안하지만 내 요구에 맞지 않는다. 혼합 된 방법을 시도했다. 규칙과 작은 파서를 만들었다. 심지어 예외가 생기면 함수가 var처럼 생성된다. jsFunc = new Function (' return '+ value)()를 사용하여 값을 얻습니다. 이것은 eval과 매우 흡사합니다. – Felishia

관련 문제