반응형
JSON 문자열 key에 따옴표가 없습니다
JSON 문자열은 key:value 형식입니다문자열, 일반 키는 큰따옴표로 묶입니다.
예:
<?php
$data = array('name'=>'fdipzone');
echo json_encode($data); // {"name":"fdipzone"}
print_r(json_decode(json_encode($data), true)); //Array ( [name] => fdipzone )
?>
그러나 json_decode는 json_decode에서 json_decode가 없는 경우 실패한다
<?php
$str = '{"name":"fdipzone"}';
var_dump(json_decode($str, true)); // array(1) { ["name"]=> string(8) "fdipzone" }
$str1 = '{name:"fdipzone"}';
var_dump(json_decode($str1, true)); // NULL
?>
해결 방법: 이중 괄호가 없는 키가 있는지 여부를 판단하고, 부족할 경우 "key"로 정규화하여 json_decode를 수행합니다
<?php
/** 호환되는 Key에 JSON 문자열 구문 분석기가 없습니다
* @param String $str JSON 문자열
* @param boolean $mod true:Array,false:Object
* @return Array/Object
*/
function ext_json_decode($str, $mode=false){
if(preg_match('/\w:/', $str)){
$str = preg_replace('/(\w+):/is', '"$1":', $str);
}
return json_decode($str, $mode);
}
$str = '{"name":"fdipzone"}';
var_dump(ext_json_decode($str, true)); // array(1) { ["name"]=> string(8) "fdipzone" }
$str1 = '{name:"fdipzone"}';
var_dump(ext_json_decode($str1, true)); // array(1) { ["name"]=> string(8) "fdipzone" }
?>
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
php explode를 사용하여 문자열을 분할하는 것은 초보자들이 쉽게 간과할 수 있는 문제 (0) | 2022.08.24 |
---|---|
php 0~1 난수 생성 방법 (0) | 2022.08.24 |
curl 또는 file_get_contents 인증 페이지를 가져오는 방법 (0) | 2022.08.24 |
php 문법 기술 (0) | 2022.08.24 |
mongodb 위치 찾기 (0) | 2022.08.24 |