2012-09-08 2 views
-2

웹 호스트가 PHP 5.3을 실행 중이지만 어떤 이유로 Json_decode()를 사용할 수 없습니다. 왜 그런가요? 어떻게 작동시킬 수 있습니까? Json_decode()에 대한 대안이 있습니까?JSON 디코딩 사용 PHP 5.3

$data= json_decode($_POST['moment']); 
var_dump($_POST['moment']); 
foreach($data as $item) { 
echo $item; 

을 그리고이 출력 :

I는 다음과 같이하여 사용하고 문자열 (22) "[\"36 \ "\"37 \ "\"38 \ "]" 을 경고 :() 나는 문자열을 만들어 볼 수 있지만 내가 json_decode이

감사

를 배열 $ 데이터를 생성하는 작업을 얻을 수없는 위해서 var_dump를함으로써 라인 (23)

에 foreach는()에 대한 공급 잘못된 인수

+3

스크립트 실행 중 PHP 오류를 확인 했습니까? – Jocelyn

+2

"작동하지 않는"방법? "정의되지 않은 함수"오류가 발생합니까? –

+2

사용할 수 없다는 것은 무엇을 의미합니까? 오류? IT가 안된다고? – AlienWebguy

답변

4

json_decode은 디코드하도록 요청한 문자열이 유효하지 않은 경우 NULL을 반환합니다. json_last_error을 사용하여 문제를 진단 할 수 있습니다.

이와 같은 배열을 반복 할 때는 값이 실제로 배열인지 확인해야합니다. 설명서의 코드를 기반으로

$data= json_decode($_POST['moment'], true); 
if (!is_array($data)) { 
    echo json_error_string(json_last_error()); 
} else { 
    foreach($data as $item) { 
     echo $item; 
    } 
} 

:

function json_error_string ($json_error_code) { 
    switch ($json_error_code) { 
     case JSON_ERROR_NONE: 
      return ' - No errors'; 
     break; 
     case JSON_ERROR_DEPTH: 
      return ' - Maximum stack depth exceeded'; 
     break; 
     case JSON_ERROR_STATE_MISMATCH: 
      return ' - Underflow or the modes mismatch'; 
     break; 
     case JSON_ERROR_CTRL_CHAR: 
      return ' - Unexpected control character found'; 
     break; 
     case JSON_ERROR_SYNTAX: 
      return ' - Syntax error, malformed JSON'; 
     break; 
     case JSON_ERROR_UTF8: 
      return ' - Malformed UTF-8 characters, possibly incorrectly encoded'; 
     break; 
     default: 
      return ' - Unknown error'; 
     break; 
    } 
} 

마지막으로, 당신은 오류 메시지를 받고되지 않도록하면 하나가 error_reporting 꺼져 있거나 display_errors 오프를 나타냅니다. error_reporting(E_ALL & E_STRICT); ini_set('display_errors', '1');으로 모든 오류보고를 활성화해야합니다. 프로덕션 코드에서 제거하십시오.하지만 활발하게 작업하는 동안 만들 코드에 대한 모든 정보를 볼 수 있어야합니다.

문서

+0

반환하는 오류는 구문 오류입니다. 형식이 잘못된 JSON – user1592953

+0

+1입니다. 배열에 대해서뿐만 아니라 객체에 대해서도'foreach'를 사용할 수 있습니다, fyi. – AlienWebguy

+0

나는 거의 항상 연관 배열을 사용한다. 정상적으로 사용하지 않을 때 임의의'stdObject'가 코드 주위에 떠 다니는 것은 슬픔을 요구하는 것입니다. 다른 것들을 위해서'stdObject'를 사용하거나, 객체 인자를 취하는 함수 나 메소드로 작업한다면, 그것은 의미가 있습니다. 그렇지 않으면 배열을 사용합니다. @AlienWebguy - 반복 인터페이스를 구현하는 객체를 사용할 수 있지만 예전 개체는 사용할 수 없습니다. stdClass는 반복 가능하지만, 내가 말했듯이 ... 왜 귀찮게합니까? –

2

해결 그것을 사용 위해서 stripslashes() :

$objJs = json_decode(stripslashes($_POST['obj']));