2015-12-02 64 views
1

還有就是我的函數的數組來代替:部隊序列化的Symfony返回一個對象

private function responseJson($datas, $code) 
{ 
    $serializer = $this->container->get('jms_serializer'); 
    $context = new SerializationContext(); 
    $context->setSerializeNull(true); 
    $response = new Response($serializer->serialize($datas, 'json', $context->enableMaxDepthChecks()), $code); 
    $response->headers->set('Content-Type', 'application/json'); 
    return $response; 
} 

我用的symfony串行組件。這是我的服務器在我調用這個函數時所做的。客戶端需要一個數組,但服務器返回一個對象。是否有可能強制返回一個數組?

感謝您的回答!

+0

您可以在將對象作爲響應發送之前將其轉換爲數組。看到[這裏](http://stackoverflow.com/questions/4345554/convert-php-object-to-associative-array) –

+0

我已經試過'$ datas =(array)$ datas'。但它不起作用 –

回答

1

從我在JsonSerializationVisitor實際編碼與json_encode完成閱讀:

$result = @json_encode($this->getRoot(), $this->options); 

正如我在this post讀取json_encode數組被迫創作,不能完成。

如果你的輸入數據是一個沒有索引的數組,那麼json_encode會產生一個數組。這意味着如果數據中的密鑰名稱確實重要,則不能將數組返回給客戶端。

+0

好的,我再考慮給出的結果,並有鑰匙。正如你所說,客戶端無法獲得數組。所以我嘗試'array_values($ datas)'去除鍵,但它不起作用。 –

+0

我在Symfony 2.7.7中做了一個快速項目,安裝了jms/serializer-bundle並將你的代碼粘貼到控制器中。我已經給這個控制器使用了array_values處理過的三個不同的數組。您可以[在此處查看代碼](http://pastebin.com/jqvVXdUr)。無論選擇哪個陣列,我都會得到一個數組作爲響應。我無法想象你的'$ datas'數組可能會導致響應成爲一個對象,但是也許你可以展示它的外觀如何? –

+0

感謝你爲你做了什麼。而如果$ datas已經是一個對象而不是數組會發生什麼?它會返回一個對象,會嗎? –