JS에서 JSON 문자열을 JSON 데이터 형식으로 구문 분석하는 방법에는 일반적으로 두 가지가 있습니다.
1. 하나는 eval_r() 함수를 사용하는 것입니다.
2. 함수 개체를 사용하여 반환 분석을 수행합니다.
데이터 전송 과정에서 json은 텍스트, 즉 문자열 형태로 전송되며, JS는 JSON 객체를 대상으로 동작하므로 JSON 객체와 JSON 문자열 간의 변환이 핵심이다. 예:
JSON 문자열:
var str1 = '{ "name": "cxh", "sex": "man" }';
JSON 개체:
var str2 = { "name": "cxh", "sex": "man" };
첫 번째 해결책:
var dataObj=eval_r("(" data ")");//json 객체로 변환
왜 eval을 추가하는가? "("(" 데이터 ")");//" 여기요?
이유는 평가 자체의 문제입니다. json은 "{}"으로 시작하고 끝나기 때문에 JS에서는 명령문 블록으로 처리되므로 강제로 표현식으로 변환해야 합니다.
괄호를 추가하는 목적은 JavaScript 코드 처리 시 괄호 안의 표현식을 명령문으로 실행하는 대신 eval 함수가 객체로 변환하도록 강제하기 위한 것입니다. 예를 들어 객체 리터럴 {}을 사용하면 외부 대괄호가 추가되지 않으면 eval은 중괄호를 JavaScript 코드 블록의 시작 및 끝 표시로 인식하고 {}는 빈 문을 실행하는 것으로 간주됩니다. 따라서 다음 두 가지 실행 결과는 다릅니다.
alert(eval_r("{}"); // return undefine
alert(eval_r("({})"); // return object[Object]
이런 글은 JS 어디에서나 볼 수 있습니다.
예: (function()) {}();
var str1 = '{ "name": "cxh", "sex": "man" }';
var data=eval_r("(" str1 ")");//json 객체로 변환/ /data =(new
alert (data.name);//cxh
여기서 특별한 주의가 필요한 것은 메서드 1의 eval_r() 메서드가 문자열(js 스크립트일 수 있음)을 동적으로 실행하므로 시스템 보안 문제가 쉽게 발생할 수 있다는 것입니다. 따라서 eval_r()을 우회하는 일부 타사 클라이언트 스크립트 라이브러리를 사용할 수 있습니다. 예를 들어 JavaScript의 JSON은 3k 이하의 스크립트 라이브러리를 제공합니다.
두 번째 해결 방법:
두 번째 구문 분석 방법은 Function 개체를 사용하는 것입니다. 일반적인 응용 프로그램은 JQUERY의 AJAX 메서드에서 성공하는 것입니다. 반환된 데이터 data
var str1 = '{ "name": "cxh", "sex": "man" }';
var data = (Function("","return " str1) )() ;
alert(data.name);//cxh