Сценарий: Отзывы клиентов о проекте. Выходной результат JSON содержит поле данных, для которого требуется объект. В некоторых случаях он возвращает [] Вместо {} Данные предоставляются другими подразделениями компании, и при просмотре исходных данных не возникает никаких проблем. Позже, поскольку мы хотим добавить некоторую предварительную обработку, мы декодируем данные JSON из других отделов и обрабатываем поле. Однако, когда мы снова используем вывод JSON после обработки, мы обнаруживаем, что результат не тот, который нам нужен.
Необработанные данные
{
...,
"foo": "",
"bar": {},
...
}среди продуктов питания Это поле я собираюсь обработать и использовать его снова после обработки. json _encode($данные) Кодирование в формате JSON.
Это то, что происходит, когда кодирование завершено.
{
...,
"foo": "",
"bar": [],
...
}Пустые объекты программировали пустые массивы, и я не имел дела с полями. бар
Благодаря фактическому измерению аналоговых данных выясняется, что причина в том, что при декодировании JSON это так решается.
$data = json_decode($jsonString, true)
Вот в чем проблема. Из-за особенностей самого PHP, он находится в PHP. массив Он может представлять строго типизированные языки, такие как список и карта в Java.
Посмотрите на PHP json_decode() Как определяется метод?
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
Источник http://php .net/manual/zh/function.json-decode.php
Когда возвращается второй параметр $assoc by true , тип массив , Поэтому проблема возникает, когда пустые объекты JSON {} и [] Пустые массивы, результаты, декодированные таким образом, согласованы; т. е. массив() Когда снова json_encode() Пришло время кодировать. {} изменить [] Сейчас.
Поэтому правильно будет декодировать JSON json_decode Не передавайте второй параметр; пусть результатом декодирования будет объект, а затем манипулируйте свойствами объекта. После завершения операции в кодировке снова не будет никаких отклонений.
Эта проблема наиболее заметна в стыковке API с сильным типизированным языком и слабым типизированным языком, потому что следующий дом проекта-использование языка Java, что приводит к ОШИБКЕ
Статью также можно посмотреть в моем блоге по адресу http://www.hfxblog.com/2017/08/03/2017-08-02-Php-json-decode./