Получать полезную нагрузку 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)?