개발 꿀팁/PHP

JSON 문자열 key에 큰따옴표가 없습니다

Jammie 2022. 8. 24. 13:43
반응형

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" }
?>

 

반응형