현재 위치: > 최신 기사 목록> JSON_LAST_ERROR는 중첩 또는 복잡한 구조를 처리 할 때 JSON 문제를 해결하는 데 어떻게 도움이 될 수 있습니까?

JSON_LAST_ERROR는 중첩 또는 복잡한 구조를 처리 할 때 JSON 문제를 해결하는 데 어떻게 도움이 될 수 있습니까?

gitbox 2025-08-28

JSON_LAST_ERROR는 중첩 또는 복잡한 구조를 처리 할 때 JSON 문제를 해결하는 데 어떻게 도움이 될 수 있습니까?

PHP에서 JSON 데이터를 처리 할 때는 종종 JSON_DECODE ()를 사용하여 JSON 문자열을 PHP 변수로 변환합니다. 이 과정은 일반적으로 매우 직관적이지만 중첩 또는 복잡한 구조를 다룰 때는 종종 구문 분석 오류가 발생합니다. 현재 문제를 해결하기 위해 JSON_LAST_ERROR ()를 사용해야합니다.

1. JSON_DECODE () 함수 및 일반적인 JSON 문제

JSON_DECODE () 는 JSON 문자열을 구문 분석하는 데 사용되는 PHP의 함수입니다. JSON 형식 데이터를 PHP의 배열 또는 객체로 변환 할 수 있습니다. 기본적으로 JSON_DECODE ()는 PHP 객체를 반환합니다. 연관 배열을 반환하려면 두 번째 매개 변수를 전달할 수 있습니다.

예를 들어:

 <span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"name": "John", "age": 30}'</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>);
</span></span>

JSON 데이터를 구문 분석 할 때 문제가 있으면 JSON_DECODE ()가 NULL을 반환합니다. 현재 JSON_LAST_ERROR () 함수를 사용하여 특정 오류의 원인을 결정해야합니다.

2. 공통 오류 유형 및 JSON_LAST_ERROR () 리턴 값

PHP는 JSON_LAST_ERROR () 함수를 제공하여 마지막 JSON 작업의 오류 코드를 얻습니다. JSON_LAST_ERROR ()는 오류 상수를 반환합니다. 일반적인 오차 상수는 다음과 같습니다.

  • JSON_ERROR_NONE : 오류가없고 구문 분석이 성공적이었습니다.

  • JSON_ERROR_DEPTH : 최대 스택 깊이를 초과합니다 (즉, 중첩이 너무 깊습니다).

  • JSON_ERROR_STATE_MISTACTH : JSON이 수정되었거나 불법 JSON 데이터가 처리중인 불법 JSON 상태입니다.

  • JSON_ERROR_CTRL_CHAR : 제어 문자 오류, 불법 제어 문자가 JSON에 나타납니다.

  • JSON_ERROR_SYNTAX : 구문 오류, JSON 형식이 올바르지 않습니다.

  • JSON_ERROR_UTF8 : UTF-8 인코딩 오류, JSON 문자열에는 잘못된 UTF-8 문자가 포함되어 있습니다.

3. JSON_LAST_ERROR ()를 사용하여 문제를 해결하는 방법은 무엇입니까?

중첩 또는 복잡한 구조를 다룰 때 오류가 상대적으로 높기 때문에 문제를 신속하게 찾을 수 있어야합니다. JSON_LAST_ERROR ()를 사용하면 오류가 발생하면 더 자세한 오류 정보를 얻을 수 있습니다.

예를 들어:

 <span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"name": "John", "address": {"city": "New York", "zip": "10001"}'</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">json_last_error</span></span><span>() !== JSON_ERROR_NONE) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'JSON 디코딩 오류: '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">json_last_error_msg</span></span><span>();
}
</span></span>

위의 코드는 JSON : 구문 오류와 유사한 디코딩 오류를 출력하여 구문 문제로 찾는 데 도움이됩니다.

오류 확인 케이스

더 깊은 중첩 JSON 데이터가 있다고 가정합니다.

 <span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"user": {"name": "Alice", "details": {"address": {"street": "123 Main St", "city": "Wonderland"}}}}'</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">json_last_error</span></span><span>() !== JSON_ERROR_NONE) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'실수: '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">json_last_error_msg</span></span><span>();
}
</span></span>

이 코드 구문 분석에는 아무런 문제가 없으며 JSON 형식이 정확하기 때문에 출력이 비워집니다.

그러나 실수로 JSON에 중복 쉼표를 추가하면 :

 <span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"user": {"name": "Alice", "details": {"address": {"street": "123 Main St", "city": "Wonderland",}}}}'</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">json_last_error</span></span><span>() !== JSON_ERROR_NONE) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'실수: '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">json_last_error_msg</span></span><span>(); </span><span><span class="hljs-comment">// 산출:실수: Syntax error</span></span><span>
}
</span></span>

이 시점에서 JSON_LAST_ERROR_MSG ()는 JSON 구문이 잘못되었으므로 구문 오류를 반환합니다. 추가 쉼표가 구문 분석이 실패하게됩니다.

4. 중첩 된 구조물의 특별한 문제

중첩 구조는 JSON 데이터의 복잡성을 증가시키고 오류를 감지하기 어려울 수 있습니다. 예를 들어:

 <span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"user": {"name": "Alice", "address": "Wonderland"}}'</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">json_last_error</span></span><span>() !== JSON_ERROR_NONE) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'실수: '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">json_last_error_msg</span></span><span>(); </span><span><span class="hljs-comment">// 可能산출 Syntax error</span></span><span>
}
</span></span>

이 예에서 JSON의 주소 값은 객체이어야하지만 실제로는 문자열입니다. 이 오류는 JSON 구문 분석의 직접적인 실패를 일으키지 않지만 응용 프로그램 논리에서 처리 될 때 예기치 않은 동작이 발생합니다. 따라서 JSON_LAST_ERROR_MSG ()는 이러한 유형의 잠재적 문제를 가능한 빨리 발견하는 데 도움이 될 수 있습니다.

5. 깊은 둥지 문제 및 json_error_depth

매우 깊은 중첩 구조를 처리 할 때는 JSON_ERROR_DEPTH 오류가 발생할 수 있습니다. 이 오류는 JSON 데이터로 중첩 된 레이어 수가 PHP 구성의 최대 깊이를 초과 함을 나타냅니다.

 <span><span><span class="hljs-variable">$json</span></span><span> = </span><span><span class="hljs-string">'{"level1": {"level2": {"level3": {"level4": {"level5": {"level6": {"level7": "end"}}}}}}}}'</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">json_last_error</span></span><span>() === JSON_ERROR_DEPTH) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'실수: JSON 데이터 중첩 수준이 너무 깊습니다'</span></span><span>;
}
</span></span>

기본적으로 PHP는 JSON 데이터의 중첩 레이어 수에 제한이 있습니다. JSON_DECODE () 의 세 번째 매개 변수 깊이 로 중첩 레이어의 최대 수를 조정할 수 있습니다.

 <span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$json</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>); </span><span><span class="hljs-comment">// 최대 깊이를 설정하십시오 10</span></span><span>
</span></span>

6. JSON 구문 분석을 최적화하는 방법

복잡한 JSON 구조를 다룰 때는 구문 분석 프로세스를 최적화하는 것이 매우 중요합니다. 일반적인 최적화 방법은 다음과 같습니다.

  • JSON 데이터의 복잡성을 줄이기 : 과도한 중첩 및 설계 데이터 구조를 합리적으로 피하십시오.

  • 입력 데이터 확인 및 확인 : JSON 데이터를 구문 분석하기 전에 데이터가 올바르게 형식화되어 있는지 확인하고 몇 가지 일반적인 형식 오류를 피하십시오.

  • 구문 분석 깊이 증가 : 실제로 깊은 중첩이 필요한 JSON 데이터의 경우 최대 깊이를 늘려서 구문 분석 오류를 피할 수 있습니다.

7. 결론

PHP에서 JSON_LAST_ERROR ()는 특히 중첩 또는 복잡한 JSON 구조를 처리 할 때 JSON 구문 분석 중에 다양한 문제를 해결하고 진단하는 데 도움이되는 매우 유용한 도구입니다. 일반적인 오류 유형을 이해하고 JSON_LAST_ERROR ()를 올바르게 사용하는 방법을 배우면 개발자가 JSON 데이터를보다 효율적으로 처리하고 잠재적 인 오류를 피하는 데 도움이 될 수 있습니다.