Почтальон показывает неожиданный ‘A’ в ответе json, но json хорошо сформирован

#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    |          |
 |          |<-------------------|<--------------|<----------|          |
  

Я надеюсь, что мой ответ может быть полезен кому угодно.