Zend rpc json return 数组

Zend rpc json return array

您好,我有一个小问题我无法解决。我正在使用 ZendFramework 和 Apigility 编写 RPC 服务。响应必须是 json 数组。接下来是所有内容协商代码。

'controllers' => array(
        'NmdaWebApi\V1\Rpc\Hola\Controller' => 'Json',

'accept_whitelist' => array(
        'NmdaWebApi\V1\Rpc\Hola\Controller' => array(
            0 => 'application/vnd.nmda-web-api.v1+json',
            1 => 'application/json',
            2 => 'application/*+json',
        ),
'content_type_whitelist' => array(
        'NmdaWebApi\V1\Rpc\Hola\Controller' => array(
            0 => 'application/json',
        ),

这就是我拥有控制器的方式

class HolaController extends AbstractActionController{
        public function holaAction(){
                return array(1,2,3,4,5);}}

这是返回的 json。

{"0":1,"1":2,"2":3,"3":4,"4":5}

我得到了这个列表,我想要一个数组。这是另一个例子。

return array(1,2,3,4,array(5,6,7));
{"0":1,"1":2,"2":3,"3":4,"4":[5,6,7]}

谁能告诉我如何避免这种情况?

Edit_1

我找到了解决方法。使用 HalJson 解决了这个问题。但我仍然不明白为什么它不能正常工作 Json。

'controllers' => array(
        'NmdaWebApi\V1\Rpc\Hola\Controller' => 'HalJson',

在您的操作中,您必须 return JsonModel。为此,首先在 module.config.php:

中的 'view_manager' 部分下创建一个 'strategies' 键
'view_manager' => array(
    'strategies'                => array(
        'ViewJsonStrategy',
    ),
),

现在您可以 return 在您的操作中使用 JsonModel:

$data = array(1, 2, 3, 4, 5);

return new JsonModel([
    'data' => $data
]);