Получать полезную нагрузку JSON с помощью платформы ZEND и/или PHP
Я получаю полезную нагрузку JSON из веб-службы на своей внутренней веб-странице на странице /asset/setjob. Ниже приведена полезная нагрузка JSON в /asset/setjob:
[{ "работа": { "source_filename": "beer-drink-pig.mpg", "current_step": "waiting_for_file", "encoding_profile_id": "nil" , "разрешение": "ноль", "status_url": " http://example.com/api/v1/jobs/1.json", "id": 1, "bitrate": "nil" , "current_status": "ожидание файла", "current_progress": "nil" , "remote_id": "my-own-remote-id" }}]
Эта полезная нагрузка публикуется один раз на этой странице. Страница предназначена не для просмотра, а для разбора объекта JSON для id и current_status, чтобы я мог вставить его в базу данных. Я использую среду Zend.
КАК Я получу эту полезную нагрузку в Zend? Я $_GET ['json']? $_POST [ 'работа']? Ничто из этого не работает. Мне по существу нужно назначить эту полезную нагрузку для переменной php, чтобы я мог ее манипулировать.
Я пробовал:
$jsonStrGet = var_dump ($ _ GET); $ jsonStrPost = var_dump ($ _ POST);
И я пробовал:
$ response = $this- > getResponse(); $body = $response- > getBody();
Blockquote
Любая помощь будет очень признательна! Спасибо.
Ответы
Ответ 1
Таким образом можно получить данные полезной нагрузки (внутри вашего метода действий):
$body = $this->getRequest()->getRawBody();
$data = Zend_Json::decode($body);
Тело $будет содержать вашу сырую строку JSON: [{ "job": { "source_filename":...}] и $data variable будут содержать декодированные данные JSON, переданные в полезной нагрузке.
Ответ 2
Я не знаю, как вы используете ZF здесь, но для доступа к параметрам запроса вам нужно использовать
$this->getParams() or $this->getParam('yourvar');
(См. руководство)
в вашем контроллере.
Затем используйте Zend_Json::decode($var);
Ответ 3
Следуя тому, что @Saeven сказал выше для Zend Framework 2, вы бы использовали $request- > getContent() с \Zend\Json\Json:: decode. Вот пример, который я использовал для тестирования.
<?php
namespace Rsvp\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;
class RsvpController extends AbstractActionController{
public function getAccessTokenAction() {
$request = $this->getRequest();
$result = array('status' => 'error', 'message' => 'There was some error. Try again.', 'isXmlHTTP' => $request->isXmlHttpRequest());
if($request->isXmlHttpRequest()){
$data = \Zend\Json\Json::decode($request->getContent());
if(isset($data->token) && !empty($data->token)){
$result['status'] = 'success';
$result['accessToken'] = '1234';
$result['message'] = '';
}
}
return new JsonModel($result);
}
}
Ответ 4
Не уверен, что вы просите, но чтобы преобразовать строку JSON в объект, используйте Zend_Json::decode($foo)
?