>백엔드 개발 >PHP 문제 >PHP 배열을 json 형식으로 변환할 때 문제를 해결하는 방법이 비어 있습니다.

PHP 배열을 json 형식으로 변환할 때 문제를 해결하는 방법이 비어 있습니다.

PHPz
PHPz원래의
2023-04-20 15:05:541087검색

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 문자열로 변환하려고 합니다. 결과적으로 우리가 얻는 것은 빈 문자열입니다. 이 결과는 우리를 놀라게 했고 우리 자신의 기술 수준에 의문을 제기하게 만들었습니다.

문제 해결

다음으로 문제를 단계별로 해결해 보겠습니다.

  1. 배열이 UTF-8로 인코딩되었는지 확인하세요

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);
?>
  1. 배열에 null 값이 포함되어 있지 않은지 확인하세요.

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);
?>
  1. 배열의 키 이름이 유효한지 확인하세요

JSON의 키 이름은 문자열 유형이어야 합니다. 즉, 배열의 키 이름은 문자열이어야 합니다. 숫자를 키 이름으로 사용하는 경우 json_encode() 함수를 사용할 때 문제가 발생합니다.

다음 예에서는 json_encode() 함수를 사용하면 결과가 빈 문자열입니다.

<?php
$arr = array(0=>'apple',1=>'banana',2=>'orange');
echo json_encode($arr);
?>

이때 숫자 키 이름을 문자열 형식으로 변경해야 합니다. 예:

<?php
$arr = array(&#39;0&#39;=>'apple','1'=>'banana','2'=>'orange');
echo json_encode($arr);
?>
  1. 배열에 무한 주기 참조가 없는지 확인하세요

배열에 무한 주기 참조가 있으면 json_encode() 함수가 배열을 처리할 수 없고 빈 문자열. 배열에 자체 참조 관계가 중첩되어 있는 경우 json_encode()를 사용할 때 이 문제를 확실히 발견할 수 있습니다.

이 문제를 해결하는 동안 배열이 직렬화될 수 있는지 확인해야 합니다. 즉, 모든 객체 참조를 직렬화 가능한 데이터 유형으로 바꿔야 합니다. 예:

<?php
$arr = array();
$item1 = array(&#39;id&#39;=>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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.