Рубрики
Uncategorized

Ямы, с которыми сталкивается PHP json_decode

Автор оригинала: David Wong.

Сценарий: Отзывы клиентов о проекте. Выходной результат 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./