> 웹 프론트엔드 > JS 튜토리얼 > Ajax_json에서 Json을 구문 분석하는 두 가지 방법 비교 분석

Ajax_json에서 Json을 구문 분석하는 두 가지 방법 비교 분석

WBOY
풀어 주다: 2016-05-16 15:53:00
원래의
1375명이 탐색했습니다.

eval(); //이 방법은 권장되지 않습니다

JSON.parse(); //권장 방법

1. 두 방법의 차이점

먼저 json 형식으로 객체를 초기화합니다.

  var jsonDate = '{ "name":"周星驰","age":23 }'

  var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法

  var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

로그인 후 복사

그런 다음 콘솔에서 호출하세요.

console.log( jsonObj.name ); // 두 방법 모두 올바르게 입력 가능합니다. Stephen Chow

그렇다면 두 방법의 차이점이 무엇인지 궁금합니다. (아래 코드를 살짝 바꾸자, 파란색 글씨가 수정된 부분입니다)

  var jsonDate = '{ "name":alert("hello"),"age":23 }'

  var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法

  console.log( jsonObj.age ); //会先执行“alert”输出“hello” 然后才输出 23

로그인 후 복사

"JSON.parse();" 메소드 교체:

  var jsonDate = '{ "name":alert("hello"),"age":23 }'

  var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

  cosole.log( jsonobj.age ) // 报错 这个错误告诉我们这个字符串是不合法的

로그인 후 복사

요약: "eval();" 메서드는 구문 분석 시 문자열이 유효한지 여부를 판단하지 않으며, json 개체의 js 메서드도 실행되므로 매우 위험합니다. "이 방법의 장점은 말할 필요도 없이 이 방법을 추천합니다. (이해하지 못하는 친구들은 콘솔에서 직접 테스트해볼 수 있습니다)

2. 확장 문제

코드 복사 코드는 다음과 같습니다.

var jsonDate = '{ "name":"Stephen Chow","age":23 }'

위 테스트에서 중괄호 밖의 따옴표가 빨간색으로 표시되어 있는 것을 볼 수 있습니다. 이 따옴표 쌍은 매우 중요하지만 "eval();" 및 "JSON .parser" 때문에 종종 무시됩니다. ();" 이 두 메소드의 매개변수는 문자열만 허용합니다. 즉, 문자열만 구문 분석할 수 있습니다!!

그렇다면 초기화할 때 따옴표를 추가하지 않으면 그 자체가 객체이고 js는 객체 자체의 속성과 메서드를 직접 얻을 수 있다는 생각이 듭니다. 그런 다음 "eval();" 또는 "JSON.parse();"를 사용하여 문자열을 구문 분석하는 것이 환경 친화적이지 않습니까?

이유는 매우 간단합니다. 프런트엔드는 백엔드에 문자열 데이터 형식만 제공할 수 있습니다. 백엔드가 프런트엔드로 반환하는 내용은 반환되는 데이터 형식에 따라 다릅니다. 사용하기 전에 구문 분석해야 합니다.

(일반적으로 다들 무시하고 크게 관심을 두지 않는 작은 문제입니다. 제가 궁금한 이유는 제가 백엔드에 대해 잘 모르기 때문입니다. 백엔드에 대해 잘 모르고 어떻게 작동하는지 아는 친구들에게 도움이 될 것입니다. 사건 이후 자연스럽게 기억이 깊어질 것이므로 개발 과정에서 놓치지 않을 것입니다.)

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿