@Kerm

JsonResponse убирает индексы массива из результата, если они начинаются с нуля?

Подскажите, есть массив:

Array
(
    [List] => Array
        (
            [0] => Array
                (
                    [guid] => Пустое значение поля глобальный идентификатор региона
                )

            [1] => Array
                (
                    [guid] => Пустое значение поля глобальный идентификатор региона
                )

        )

)


В json это будет как:

{
  "List": [
    {
      "guid": "Пустое значение поля глобальный идентификатор региона"
    },
    {
      "guid": "Пустое значение поля глобальный идентификатор региона"
    }
  ]
}


А если убрать элемент с индексом 0, то будет так:

"List": {
            "1": {
                "guid": "Пустое значение поля глобальный идентификатор региона"
            }
        }


Как сделать так чтобы не возникало такой проблемы если передан элемент с индексом 0?
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
JsonResponse не при чем. Дело в json_encode. Вам нужна опция JSON_FORCE_OBJECT

use Symfony\Component\HttpFoundation\JsonResponse;

$data = [
    'List' => [
        0 => [
            'id' => 'id0',
        ],
        1 => [
            'id' => 'id1',
        ],
    ],
];
dump(
    new JsonResponse(
        json_encode($data, JsonResponse::DEFAULT_ENCODING_OPTIONS | JSON_FORCE_OBJECT),
        200,
        [],
        true
    )
);
// or
$response = new JsonResponse($data);
$response->setEncodingOptions(JsonResponse::DEFAULT_ENCODING_OPTIONS | JSON_FORCE_OBJECT);
dump($response->getContent());


Либо, если это нужно регулярно и много где, можно создать свой JsonResponse, который наследуется от стандартного, в котором изменить encodingOptions на нужные
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы