将json对象作为json-rpc响应结果返回

时间:2014-04-17 23:45:11

标签: java php json-rpc

根据json-rpc规范2.0,响应必须包含结果(成功时),错误(失败时)和id。到目前为止,我在网上看到了所有的例子,结果他们使用原始数据类型作为整数或简单的字符串。我正在开发一个项目,我需要通过json-rpc调用发送更多数据。所以,我正在考虑将结果作为json字符串发送,并将其发送到响应对象的结果值中。例如:

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

但是在客户端,我收到一条错误,指出响应是无效的json对象。所以我应该坚持使用json-rpc规范并仅使用json-rpc响应对象的结果值发送原始值,或者我可以在响应中将复杂数据作为结果值发送,但是我的编码出错了,这就是为什么它不能正常工作?如果可以在响应中发送Complext值,那么我将调试我的代码以找到问题。但在此之前,我只是想知道它是否符合标准。

我的json-rpc服务器是用php编写的,客户端是用java编写的(使用Web服务的java应用程序)。

1 个答案:

答案 0 :(得分: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序列化程序可能无法(使用某些数据)来判断您是否需要PHP Array的{​​{1}}或Object JSON序列化(即:你需要给它提示。