your programing

PHP로 JSON에서 빈 객체를 만드는 가장 좋은 방법은 무엇입니까?

lovepro 2020. 10. 4. 12:54
반응형

PHP로 JSON에서 빈 객체를 만드는 가장 좋은 방법은 무엇입니까?


빈 JSON 객체를 만들려면 일반적으로 다음을 사용합니다.

json_encode((object) null);

개체에 null을 캐스팅하면 작동하지만 다른 바람직한 방법 및 / 또는이 솔루션에 문제가 있습니까?


솔루션이 작동 할 수 있습니다 ..

문서 (object) null는 빈 객체 될 것이라고 명시하고 있으며, 일부는 코드가 유효하고 사용하는 방법이라고 말할 수 있습니다.

PHP : 객체-Manual

다른 유형의 값이 객체로 변환되면 stdClass 내장 클래스의 새 인스턴스가 생성됩니다. 값이 NULL이면 새 인스턴스가 비어 있습니다.


..하지만 안전하게 보관하세요!

위의 내용이 언제 / 변경 될지 알 수는 없지만 항상 {}인코딩 된 데이터에서 끝날 것이라고 100 % 확신 하려면 다음과 같은 해킹을 사용할 수 있습니다.

json_encode (json_decode ("{}"));

지루하고 추악하지만 json_encode / json_decode가 둘 중 하나와 호환되며 항상 다음을 true로 평가할 것이라고 가정 / 희망합니다.

$a = <something>;

$a === json_decode (json_encode ($a)); 

권장 방법

json_decode ("{}")stdClass안전한 것으로 간주되면 아래를 사용하여 기본값 을 반환합니다 . 언급했듯이 (object) null.

json_encode (new stdClass);

객체를 동적 사전으로 사용하는 경우 (그리고 그렇게 생각합니다) ArrayObject 를 사용하고 싶다고 생각합니다 .

비어있는 경우에도 JSON 사전에 매핑됩니다. 목록 (배열)과 사전 (연관 배열)을 구별해야하는 경우 유용합니다.

$complex = array('list' => array(), 'dict' => new ArrayObject());
print json_encode($complex); // -> {"list":[],"dict":{}}

또한 연관 배열을 사용하는 것처럼 원활하게 조작 할 수 있으며 사전에 올바르게 렌더링됩니다.

$complex['dict']['a'] = 123;
print json_encode($complex); // -> {"list":[],"dict":{"a":123}}

unset($complex['dict']['a']);
print json_encode($complex); // -> {"list":[],"dict":{}}

이것이 가지 방식 으로 100 % 호환되어야 하는 경우 , 객체 대신 json_decode반환되도록 래핑 할 수도 있습니다 (결과 트리를 살펴보고 모든 객체를 재귀 적으로 교체해야하므로 매우 쉬운 작업입니다).ArrayObjectsstdClass

Gotchas . 하나의 I의 한 지금까지 발견 : is_array(new ArrayObject())평가합니다에 false. is_array코드에서 발생 항목 을 찾아서 바꿔야 할 수도 있습니다 (사용 (($foo instanceof ArrayObject) || is_array($foo))).


글쎄, json_encode()단순히 PHP 배열 / 객체 / 등에서 문자열을 반환합니다. 다음을 수행하여 동일한 효과를 훨씬 더 효율적으로 얻을 수 있습니다.

$json = '{}';

이 작업을 수행하기 위해 함수를 사용하는 것은 의미가 없습니다.

업데이트 댓글 업데이트에 따라 다음을 시도 할 수 있습니다.

$test = json_encode(array('some_properties'=>new stdClass));

그게 당신이했던 것보다 더 나은지 모르겠지만.


PHP로 JSON에서 빈 개체를 만들려면

$json=json_decode('{}');
$json->status=202;
$json->message='Accepted';
print_r($json);

생산 한

stdClass Object
(
    [status] => 202
    [message] => Accepted
)

나중에해야 하니까요

if(is_object($json))

나는 항상 다음 (Object)[];과 같이한다.

$json = (Object)[]; // [] could also be array()

... PHP에서 놀아 ...

$json = json_encode($json);

... 이제 실제 JSON입니다 ...


당신은 또한 사용할 수 있습니다

$var = ["key" => (object) array()];

json_encode($var);

참고 URL : https://stackoverflow.com/questions/8595627/best-way-to-create-an-empty-object-in-json-with-php

반응형