6 ответов:
ваше решение может работать..
в документации указано, что
(object) nullприведет к пустому объекту, поэтому некоторые могут сказать, что ваш код действителен и что это метод для использования.если значение любого другого типа преобразуется в объект, создается новый экземпляр встроенного класса stdClass создается. Если значение равно NULL, то новый экземпляр будет пустой.
.. но, постарайтесь сохранить его в безопасности!
хотя вы никогда не знаете, когда/если выше будут меняться, так что если вы хотите быть на 100% уверены, что вы всегда будете в конечном итоге с помощью
{}в закодированных данных, вы можете использовать Хак, таких как:json_encode (json_decode ("{}"));хотя это утомительно и некрасиво, я предполагаю / надеюсь, что json_encode/json_decode совместим с одним и другим и всегда будет оценивать следующее правда:
$a = <something>; $a === json_decode (json_encode ($a));
Рекомендуемый метод
json_decode ("{}")вернет astdClassпо умолчанию, использование ниже должно считаться безопасным. Хотя, как уже упоминалось, это почти то же самое, что делать(object) null.json_encode (new stdClass);
если вы используете объекты в качестве динамических словарей (и я думаю, что вы делаете), то я думаю, что вы хотите использовать ArrayObject.
он отображается в словарь JSON, даже когда он пуст. это здорово, если вам нужно различать списки (массивы) и словари (ассоциативные массивы):
$complex = array('list' => array(), 'dict' => new ArrayObject()); print json_encode($complex); // -> {"list":[],"dict":{}}вы также можете легко манипулировать им (как и с ассоциативным массивом), и он будет правильно отображаться в a словарь:
$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Так что он возвращаетArrayObjectsвместоstdClassобъекты (вам нужно будет пройти по дереву результатов и рекурсивно заменить все объекты, что является довольно простой задачей).Gotchas. Только один я нашел до сих пор:
is_array(new ArrayObject())значениеfalse. Возможно, вам придется найти и заменитьis_arrayвхождения в коде (использовать(($foo instanceof ArrayObject) || is_array($foo))).
Ну
json_encode()просто возвращает строку из массива PHP / object / etc. Вы можете достичь того же эффекта гораздо более эффективно делать:$json = '{}';нет смысла в использовании функции для этого.
обновление Согласно вашим обновлениям комментариев, Вы можете попробовать:
$test = json_encode(array('some_properties'=>new stdClass));хотя я не уверен, что это лучше, чем то, что ты делаешь.
для создания пустого объекта в JSON с PHP я использовал
$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 ...
Comments