Если вы используете объекты как динамические словари (и я думаю, что вы это делаете), то я думаю, вы хотите использовать 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
, чтобы он возвращал ArrayObjects
вместо объектов stdClass
(вам нужно пройти дерево результатов и рекурсивно заменить все объекты, что является довольно простой задачей).
Gotchas. Только тот, который я нашел до сих пор: is_array(new ArrayObject())
оценивает false
. Возможно, вам потребуется найти и заменить is_array
вхождения в вашем коде (используйте (($foo instanceof ArrayObject) || is_array($foo))
).
Вкратце:
Виджет флаттера MaterialApp выдает ошибку «Ожидается 1 обязательный аргумент, но найдено 0» для первого проекта флаттера, доступного с флаттером sdk. Я запускаю его на VScode. Как и Эшафот.