올바른 json을 찾으려면 json_decode
에 전달되는 "param"이 string 유형인지 확인하십시오. php.net에서
견적 :
적절한 PHP 타입 JSON 인코딩 된 값을 반환. 값 참, 거짓 및 널 (대소 문자를 구분하지 않음)은 TRUE로, 거짓은 및 NULL로 각각 반환됩니다. json을 으로 디코딩 할 수 없거나 인코딩 된 데이터가 재귀 제한보다 클 경우 NULL이 반환됩니다.
따라서 JSON
을 디코딩 할 수없는 경우 우리가 찾고있는 것은 NULL
입니다. 따라서 잘못된 JSON입니다. 그러나 다시 한번, 배열이나 부울 또는 다른 것과 같은 문자열이 아닌 다른 형식을 전달하는지 확인하십시오. 그것은 결코 작동하지 않을 것이기 때문입니다.
그리고 귀하의 문제를 이해합니다. @ 기호는 오류 메시지를 억제하지만 실제 코드 흐름은 표시하지 않습니다. 그것은 잘못되었을 때도 나간다. 하지만 당신은 정말로 @ 기호를 놓아 줘야합니다.
그래서 어쨌든, 당신은 아마도 json_decode
을 포함한 몇 가지 일을하는 일종의 함수를 가지고있을 것입니다. 이것은 단지 예일뿐입니다. 그러나 그것은 제가 여러분이 의미하는 바를 알려줄 것입니다.
<?php
// will fail, because it's not a string
$str1 = array ("nooblol");
// Will succeed. This is valid json
$str2 = '{"example":"value"}';
// Will fail, is of type string, but still an invalid json format
$str3 = 'invalid json string';
function saveData ($json)
{
// Check if the variable that we're about to pass
// to json_decode() is an actual string. Otherwise we
// have invalid json data anyway.
if (!is_string ($json))
{
echo 'Invalid json (or invalid type)';
return;
}
if (!$obj = json_decode ($json))
{
echo 'fail';
return;
}
// Print json object
print_r($obj);
}
saveData ($str3);
?>
라이브 예 : http://codepad.viper-7.com/KJL8st 변경 다른 결과를 볼 수 $str1
또는 $str2
에 saveData
PARAM.
유효한 json이 있는지 확인하는 방법입니다. 전적으로 유효한 데이터인지 여부를 알려주는 json_decode()
함수에 의존하지 마십시오. 함수이고 단순히 문자열을 기대합니다. 문자열을 전달해야합니다. 그래야만 유효한 json인지 여부를 알려줄 수 있습니다.
출처
2012-08-11 21:06:25
w00
처음에는 @를 사용하기 위해 -1을 사용할 자격이 있습니다 – w00
@ w00 다른 방법이 없으므로 -1이 필요합니다. http://stackoverflow.com/questions/2348152/detect-bad-json- data-in-php-json-decode +1 나를 위해 :-) – IMB
wtf 당신은 얘기하고 있습니다. 그 주제에서 OP는 분명히 그가 문자열 대신에'json_decode' 함수에'array'를 전달하는 문제를 가지고 있습니다. 그것은 오류가 발생하지 않는 것이 놀랄 일이 아닙니다. $ 변수가 실제로 string 유형인지 확인하십시오. -2 당신을 위해서 :-) – w00