2014-04-17 75 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

相关问题