eval() 및 JSON.parse()의 차이점

2059 단어
문자열을 json 객체로 해석할 때 다음 두 가지 방법을 사용할 수 있습니다.
만약 우리가 json 형식의 문자열을 가지고 있다면:
'{
    "student" : [
        {"name":"  ","age":17}, 
        {"name":"  ","age":17},
        {"name":"  ","age":17}
    ]
}'

그리고 json 대상으로 해석해야 돼요.
1. eval() 코드는 다음과 같습니다.
var data = '{"student" : [{"name":"  ","age":17}, {"name":"  ","age":17},{"name":"  ","age":17}]}';
eval('(' + data + ')');

2、JSON.parse() 코드는 다음과 같습니다.
var data = '{"student" : [{"name":"  ","age":17}, {"name":"  ","age":17},{"name":"  ","age":17}]}';
JSON.parse(data);

차이점: eval 방법은 주어진 문자열이 json 형식에 맞는지 검사하지 않습니다. 또한 주어진 문자열에 js 코드가 존재하면 eval도 함께 실행합니다. 예를 들어 위의 json 형식의 문자열이 다음과 같이 바뀌면: (빨간색 부분 주의)
var data = '{"student" : [{"name":"  ","age":17}, {"name":"  ","age":alert("hehe")},{"name":"  ","age":17}]}';

이 때 eval 방법을 실행하면 알림 상자가hehe의 문자열을 출력합니다 ~
하지만 JSON을 사용합니다.parse () 는 오류를 보고합니다. 현재 문자열이 json 형식에 맞지 않습니다. 즉 JSON입니다.parse () 방법은 변환할 문자열이 json 형식에 맞는지 확인합니다 ~
비교해 보면 eval 방법은 매우 위험하다. 특히 제3자가 관련될 때 우리는 eval에 전달된 매개 변수가 우리가 제어할 수 있다는 것을 확보해야 한다. 그렇지 않으면 안에 window와 같은 것을 삽입해야 한다.location~ 악의적인 연결을 가리키는데 그걸 하늘이라고 하죠.
그런 면에서 JSON을 추천합니다.parse는 json 형식 문자열의 해석을 실현합니다
json 형식의 문자열을 만들 때 오류가 발생하기 쉽다는 것을 감안하여 ~ json 형식의 문자열을 온라인 검사 도구로 추천합니다.http://jsonlint.com/

좋은 웹페이지 즐겨찾기