PHP에서 json_encode()를 사용하여 배열을 JSON 문자열로 변환할 때, 어떻게 작동하든 변환된 JSON 문자열이 비어 있는 경우가 가끔 있습니다. 이 문제는 실망스러울 수 있지만 해결 방법은 간단합니다.
문제 찾기
먼저 문제를 찾아야 합니다. var_dump() 함수를 사용하여 배열의 내용을 보고 예외가 있는지 또는 예상한 데이터가 있는지 확인할 수 있습니다.
예:
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); var_dump($arr); echo json_encode($arr); ?>
이 코드는 다음을 출력합니다.
array(3) { ["name"]=> string(4) "John" ["age"]=> int(30) ["city"]=> string(8) "New York" }
그런 다음 json_encode()를 사용하여 배열을 JSON 문자열로 변환하려고 합니다. 결과적으로 우리가 얻는 것은 빈 문자열입니다. 이 결과는 우리를 놀라게 했고 우리 자신의 기술 수준에 의문을 제기하게 만들었습니다.
문제 해결
다음으로 문제를 단계별로 해결해 보겠습니다.
PHP의 json_encode() 함수를 사용하려면 입력 데이터가 UTF-8로 인코딩되어야 합니다. 배열에 UTF-8로 인코딩되지 않은 문자가 있으면 JSON 문자열로의 변환이 실패합니다.
iconv() 또는 mb_convert_encoding() 함수를 통해 배열의 문자열을 UTF-8 인코딩으로 변환할 수 있습니다. 예:
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); foreach($arr as &$value){ $value = mb_convert_encoding($value, 'UTF-8', 'auto'); } echo json_encode($arr); ?>
JSON 사양은 null 값을 허용하지 않습니다. 따라서 배열에 null 값이 포함된 경우 json_encode()를 사용하면 변환이 실패하고 null이 반환됩니다.
이 시점에서 array_map() 함수를 사용하여 배열의 null 값을 빈 문자열로 바꿀 수 있습니다. 예:
<?php $arr = array("name" => "John", "age" => null, "city" => "New York"); $arr = array_map(function($value){ return $value !== null ? $value : ''; },$arr); echo json_encode($arr); ?>
JSON의 키 이름은 문자열 유형이어야 합니다. 즉, 배열의 키 이름은 문자열이어야 합니다. 숫자를 키 이름으로 사용하는 경우 json_encode() 함수를 사용할 때 문제가 발생합니다.
다음 예에서는 json_encode() 함수를 사용하면 결과가 빈 문자열입니다.
<?php $arr = array(0=>'apple',1=>'banana',2=>'orange'); echo json_encode($arr); ?>
이때 숫자 키 이름을 문자열 형식으로 변경해야 합니다. 예:
<?php $arr = array('0'=>'apple','1'=>'banana','2'=>'orange'); echo json_encode($arr); ?>
배열에 무한 주기 참조가 있으면 json_encode() 함수가 배열을 처리할 수 없고 빈 문자열. 배열에 자체 참조 관계가 중첩되어 있는 경우 json_encode()를 사용할 때 이 문제를 확실히 발견할 수 있습니다.
이 문제를 해결하는 동안 배열이 직렬화될 수 있는지 확인해야 합니다. 즉, 모든 객체 참조를 직렬화 가능한 데이터 유형으로 바꿔야 합니다. 예:
<?php $arr = array(); $item1 = array('id'=>1,'name'=>'apple'); $item2 = array('id'=>2,'name'=>'banana'); $item1['next'] = &$item2; $item2['prev'] = &$item1; $item3 = array('id'=>3,'data'=>array_merge($item1,$item2)); $arr[] = $item1; $arr[] = $item2; $arr[] = $item3['data']; echo json_encode($arr); ?>
이 예에서는 자기 참조 관계가 포함된 배열을 만듭니다. 문제를 해결하기 위해 객체 참조를 직렬화 가능한 데이터 유형으로 변경했습니다. 이를 통해 무한 참조 순환 문제를 피하고 배열을 JSON 문자열로 성공적으로 변환할 수 있었습니다.
요약
PHP에서 json_encode()를 사용할 때 빈 JSON 문자열을 만나더라도 당황하지 마세요. 위 4가지 방법을 따르면 쉽게 문제를 해결할 수 있습니다. 배열이 UTF-8로 인코딩되었는지, 배열에 null 값이 포함되어 있지 않은지, 배열의 키 이름이 유효한지, 배열에 무한 순환 참조가 없는지 확인하세요. json_encode(를 사용해도 됩니다. ) 함수를 사용하여 배열을 JSON 문자열로 성공적으로 변환했습니다.
위 내용은 PHP 배열을 json 형식으로 변환할 때 문제를 해결하는 방법이 비어 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!