programing

어레이가 php에서 비어 있으면 json_encode 함수가 중괄호 {}을(를) 반환하지 않음

testmans 2023. 2. 24. 13:20
반응형

어레이가 php에서 비어 있으면 json_encode 함수가 중괄호 {}을(를) 반환하지 않음

이 코드가 있습니다.

$status = array(
                "message"=>"error",
                "club_id"=>$_club_id,
                "status"=>"1",
                "membership_info"=>array(),
                );

echo json_encode($status);

이 함수는 json을 반환합니다.
{"message":"error","club_id":275,"status":"1","membership_info":[]}

하지만 난 이런 json이 필요해.

{"message":"error","club_id":275,"status":"1","membership_info":{}}

를 사용하다JSON_FORCE_OBJECT의 선택사항json_encode:

json_encode($status, JSON_FORCE_OBJECT);

문서

JSON_FORCE_OBJECT(정수) 비관련 배열이 사용될 때 배열이 아닌 개체를 출력합니다.출력 수신자가 개체를 예상하고 있고 배열이 비어 있을 때 특히 유용합니다.PHP 5.3.0 이후 사용 가능.

또는 개체 내에 "다른" 어레이를 유지하려면 이전 답변을 사용하지 말고 다음과 같이 하십시오.

$status = array(
                "message"=>"error",
                "club_id"=>$_club_id,
                "status"=>"1",
                "membership_info"=> new stdClass()
                );
$status = array(
                "message"=>"error",
                "club_id"=>$_club_id,
                "status"=>"1",
                "membership_info"=>(object) array(),
                );

어레이를 물체에 던져넣음으로써json_encode값은 항상 괄호 대신 중괄호를 사용합니다(빈 상태에서도).

사용할 수 없을 때 유용합니다.JSON_FORCE_OBJECT값에 실제 개체를 사용할 수 없는 경우(또는 사용할 수 없는 경우)입니다.

배열과 "개체"(단어의 JSON 의미) 간에 PHP에는 차이가 없습니다.모든 어레이를 강제로 JSON 개체로 인코딩하려면JSON_FORCE_OBJECT플래그는 PHP 5.3 이후 사용할 수 있습니다.http://php.net/json_encode 를 참조해 주세요.이는 모든 어레이에 적용됩니다.

또는 어레이 대신 실제로 PHP 코드의 개체를 사용할 수도 있습니다.

$data = new stdClass;
$data->foo = 'bar';
...

클라이언트 측에서 빈 어레이의 엣지 케이스를 처리하는 것이 더 간단할 수 있습니다.

오래된 질문인 것은 알지만 구글에서 처음 히트한 질문 중 하나이기 때문에 다른 해결책을 공유해야겠다고 생각했습니다.

PHP 7+에서는 표준 PHP 어레이를 사용하는 대신Map()데이터 구조 확장의 일부로 사용합니다.문서.

Map 객체는 어레이와 실질적으로 동일한 성능을 가지며 일반 어레이로 액세스할 수 있도록 Array Access를 구현합니다.단, 표준 어레이와는 달리 이 어레이는 항상 어소시에이션이 되어, 기대대로 동작합니다.json_encode오브젝트 키나 메모리 처리의 향상 등, 그 외의 작은 이점도 있습니다.

사용 예:

use Ds\Map;

$status = new Map([
            "message"=>"error",
            "club_id"=>$_club_id,
            "status"=>"1",
            "membership_info"=>array(),
          ]);

$map = new Map(); 
print json_encode($map); // {}

$map = new Map();
$map["foo"] = "bar";
print json_encode($map); // {"foo":"bar"}
print $map["foo"]; // bar

$map = new Map();
$map[1] = "foo";
$map[2] = "bar";
$map[3] = "baz"; 
print json_encode($map); // {"1":"foo","2":"bar","3":"baz"}

이것은 우아하다고는 할 수 없지만 간단한 문자열 치환으로 효과적으로 해결할 수 있습니다.

str_replace("[]", "{}", json_encode($data));

이것에 의해, 의 문제가 경감됩니다.JSON_FORCE_OBJECT일반 배열을 개체로 변환합니다.

언급URL : https://stackoverflow.com/questions/28189390/json-encode-function-not-return-braces-when-array-is-empty-in-php

반응형