2014-04-17 77 views
1

根據json-rpc規範2.0,響應必須包含result(成功),error(on failure)和id。到目前爲止,我在線看到的所有示例都是使用原始數據類型作爲整數或簡單字符串的結果。我正在開發一個項目,我需要通過json-rpc調用發送更多數據。所以,我想發送我的結果作爲JSON字符串,並將其發送到響應對象的結果值中。例如:將json對象作爲json-rpc響應結果返回

$response = {"result": a_json_string, "error": null, "id": 1} 

但在客戶端我收到一個錯誤說反應是無效的JSON對象。所以我應該堅持使用json-rpc規範,並且只使用json-rpc響應對象的結果值發送原始值,或者我可以在響應中發送複雜數據作爲結果值,但是在我的編碼中有些錯誤,所以這就是爲什麼它不起作用?如果可以發送補全值作爲響應,那麼我將調試我的代碼以找到問題。但在此之前,我只是想知道它是否符合標準。

我的json-rpc服務器是用php編寫的,而客戶端是用java編寫的(一個使用web服務的java應用程序)。

回答

0

$response = {"result": a_json_string, "error": null, "id": 1}

這不是一個JSON字符串,它不是有效的PHP,這樣你就不會真正向我們展示你的真正的代碼。 (奇怪的是,但並不相關,它是有效的JavaScript代碼:-)

在任何情況下,您都不需要JSON-ify序列化爲a_json_string的數據結構。

例如,如果你收到一個變量$data和你這樣做:相反

$a_json_string = json_encode($data); 
$response = json_encode(
       array("result" => $a_json_string, 
         "error" => null, 
         "id"  => 1)); 

,這樣做:

$response = json_encode(
       array("result" => $data, 
         "error" => null, 
         "id"  => 1)); 

我們就需要看到更多的代碼來具體瞭解您可能遇到的其他JSON序列化問題。例如,JSON串行器可能()無法(通過某些數據)告訴您是否想要ArrayObject PHP array()的JSON序列化(即:您需要提供提示)。

+0

對不起,關於JSON字符串,我應該提到它是僞代碼。我解決了這個問題。事實上,解決方案與您要求我不要做的第一部分代碼類似)問題出在客戶端(Java應用程序)。我期待着我使用的json-rpc客戶端庫爲我提供了完整的json響應對象。但實際上它會檢查響應,並根據成功/錯誤情況提供結果或錯誤消息作爲字符串。所以在成功的時候,結果字符串實際上是一個json字符串,我從它製作了json對象,一切正常。非常感謝。 – sparrow

+2

如果像第一個「固定」它的方法適合你,那麼你在做JSON-RPC錯誤。你不應該試圖「打印」JSON-RPC信封的result字段。這是一個JSON「值」,可以是一個String,Number,Object,Array或null值。相反,您應該確定已經傳輸了什麼數據結構(或者事先就約定達成一致),以便知道您收到的內容以及如何「打印」。 –

+0

我覺得我完全不理解你的評論,尤其是「試圖打印」部分。我發現我能夠發送複雜的值(作爲json對象)作爲json-rpc響應的結果值。和我的控制下的json-rpc客戶端和服務器,所以我知道/控制了一組確切的方法及其參數和參數類型。用php和客戶端編寫的json-rpc服務器是用java編寫的adroid應用程序。 – sparrow

相關問題