Получите полезную нагрузку JSON с фреймворком ZEND и / или PHP - PullRequest
14 голосов
/ 16 мая 2010

Я получаю данные JSON от веб-службы на внутренней веб-странице моего сайта по адресу / asset / setjob. Ниже приводится полезная нагрузка JSON, размещаемая в / asset / setjob:

[{ "работа": {"source_filename": "beer-drink-pig.mpg", "current_step": "wait_for_file", "encoding_profile_id": "nil", «разрешение»: «ноль», "status_url": "http://example.com/api/v1/jobs/1.json", "id": 1, "битрейт": "ноль", "current_status": "в ожидании файла", "current_progress": "nil", "remote_id": "my-own-remote-id"}}]

Этот полезный груз публикуется один раз на этой странице Страница предназначена не для просмотра, а для анализа объекта JSON для id и current_status, чтобы я мог вставить его в базу данных. Я использую Zend Framework.

КАК получить эту полезную нагрузку в Zend? Я $ _GET ['json']? $ _POST [ 'работа']? Ни один из них, кажется, не работает. По сути, мне нужно назначить эту полезную нагрузку переменной php, чтобы я мог затем манипулировать ею.

Я пробовал:

$ jsonStrGet = var_dump ($ _ GET); $ jsonStrPost = var_dump ($ _ POST);

И я попробовал: $ response = $ this-> getResponse (); $ body = $ response-> getBody ();

Blockquote

Любая помощь будет высоко ценится! Спасибо.

Ответы [ 4 ]

35 голосов
/ 14 мая 2011

Можно получить данные полезной нагрузки следующим образом (внутри вашего метода действия):

$body = $this->getRequest()->getRawBody();
$data = Zend_Json::decode($body);

$ body будет содержать вашу необработанную строку JSON: [{"job": {"source_filename": ...}], а переменная $ data будет содержать декодированные данные JSON, переданные в полезной нагрузке.

2 голосов
/ 13 апреля 2016

Следуя сказанному @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);
    }
}
1 голос
/ 17 мая 2010

Я не знаю, как вы здесь используете ZF, но для доступа к параметрам запроса вам нужно использовать

$this->getParams() or $this->getParam('yourvar');

(см. Руководство)

в вашем контроллере.

Затем используйте Zend_Json::decode($var);

0 голосов
/ 17 мая 2010

Не уверен, что вы спрашиваете, но для преобразования строки JSON в объект используйте Zend_Json::decode($foo)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...