> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 평가 JSON 개체 문제_javascript 기술

JavaScript 평가 JSON 개체 문제_javascript 기술

WBOY
풀어 주다: 2016-05-16 18:41:36
원래의
1077명이 탐색했습니다.

일반적인 접근 방식은 var jsonData = eval(xmlHttp.responseText)입니다. 모든 것이 올바른 것처럼 보일 수 있지만 코드를 실행하면 '잘못된 라벨' 오류가 표시됩니다. 왜? 나도 잘 모르겠지만 이 문제를 해결할 수 있는 방법을 찾았습니다.

처음 이 문제를 접했을 때도 머리가 아팠습니다. 어디에서 문제가 발생했는지 테스트하기 위해 점차 코드 범위를 좁혀가며 결국 아래와 같은 결과를 얻었습니다. 단축 코드:

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

var jsonStr1 = '{" Name":"Tom","Sex ":"Man"}';
var jsonObj1 = eval(jsonStr1);
alert(jsonObj1.Name);

실행 위의 코드는 잘못된 labe가 시작 실수에서 말한 것과 정확히 같습니다. eval 함수에는 특정 표현식이나 객체에 대한 제한이 있습니까? 그래서 배열 객체를 다시 테스트해 보니 코드는 아래와 같고, 그 결과 다음 코드가 정상적으로 실행되는군요.
코드 복사 코드는 다음과 같습니다.

var arrStr = '["Tom","Man"]'
var arrObj = eval(arrStr)
alert(arrObj[ 0]);

혹시 내 컴퓨터의 JavaScript 파서에 JSON 구문 분석에 문제가 있어서 다음 코드를 다시 테스트했지만 결과는 여전히 정상이었습니다.
코드 복사 코드는 다음과 같습니다.

var jsonObj = {"Name":"Tom","Sex ":"Man"};
alert(jsonObj.Name);

결국 여전히 문제를 스스로 해결하지 못해서 인터넷에서 답변을 검색했습니다. 관련 오류 메시지가 갑자기 문제의 원인을 찾았습니다. 해결 방법은 "평가할 때 먼저 JSON 문자열 값을 '()' 괄호로 묶어야 합니다."였습니다. 온라인에서 찾은 정보에는 이유가 설명되지 않았고, 물론 여전히 실제 이유도 이해하지 못했습니다. 괄호는 먼저 실행이나 계산을 강제하는 데 사용됩니다. 반환된 JSON은 중간에 표현식이 없는 완전한 객체입니다. 왜 괄호를 추가해야 합니까? 배열과 같은 더 복잡한 객체도 정상적으로 평가할 수 있습니다. 다른 방법은 없습니다. 먼저 이 사용법을 기억하세요. 올바른 사용법은 다음과 같습니다(eval 양쪽 끝에 있는 괄호에 주의하세요):
코드 복사 코드는 다음과 같습니다. 다음:

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