#php #json #silex #postman
#php #json #silex #postman
Вопрос:
Я разрабатываю серверную часть с помощью Silex Framework и тестирую этот фрагмент кода
foreach($P as $key=>$value)
{
$strInsert =$key."=>".$value;
array_push($json,$strInsert);
}
print_r($json);
return json_encode($json);
В каждом браузере, вызывающем маршрут, который содержит foreach, он печатается хорошо, и выданный результат считается правильно сформированным различными валидаторами json.
В postman, когда я нажимаю на ‘pretty’ Json, он показывает Unexpected 'A'
.
В raw, html и других вариантах просмотра документ json печатается без проблем.
Должен ли я продолжать беспокоиться об этой проблеме или просто игнорировать ее?
Если я не должен это игнорировать, есть ли исправление?
Комментарии:
1. Вы заключаете свое свойство JSON в объект JSON? поэтому он начинается и заканчивается скобками. Обычно это так
2. не могли бы вы вставить этот хорошо сформированный json?
3. извините, что отвечаю только сейчас, я был занят на работе: это было плохое вложение объекта json, как сказал @Puya. Спасибо за ваш ответ
Ответ №1:
После большой работы над Silex framework для создания моего серверной части, благодаря postman (приложение Chrome, действительно удобное для тестирования http-протоколов), я выяснил, что php ожидает ответа в формате Json.
Example A :
call route /path/getinfo/ with method get
execute the code --> result=$app->SomeFunctionThatInterrogatesDB(param1...) **firing error
return resu<
вот в чем дело: в этой somefunction вы делаете запрос к БД, и он возвращает строку (или несколько строк в зависимости от типа запроса), PHP думает, что ответ структурирован в формате JSON, но это не так, поэтому он выдает эту ошибку.
Этот неожиданный ‘A’ просто означает «эй, где мой json? Я ничего не могу понять!»
Исправление или обходной путь — это просто инкапсулировать ваш результат в формате json внутри маршрута.
Чтобы быть строгим изменением return result
с return $app->json(result)
. Этот код основан на silex, но даже если вы используете другой фреймворк из silex, решение состоит в том, чтобы упорядочить ваш конечный результат в формате json.Вот небольшой график (называйте меня davinci, если хотите), чтобы лучше понять поток.
|*Frontend*| route request | *Backend* | query |*Database*|
| |------------------->| |---------->| |
| | Response | json(result) | array | |
| |<-------------------|<--------------|<----------| |
Я надеюсь, что мой ответ может быть полезен кому угодно.