获取{}作为输出而不是[]

时间:2014-07-08 08:56:26

标签: php json kohana

我有返回场地菜单的服务,但如果菜单不存在,我应该返回{}作为输出,否则ios app无法解析响应和app销毁。 现在回应如下:

{
    "response": []
}

我应该

{
    "response": {}
}

使用PHP编程的API服务。 当菜单为空网址时:http://ilovejetset.com/api/v2/menu/index/422 存在某些菜单时:http://ilovejetset.com/api/v2/menu/index/423

创建回复的代码: 在'之后'功能:

$this->response->body(json_encode(array('response' => $this->response_json)));

没有菜单时:

$this->response_json = array();

4 个答案:

答案 0 :(得分:3)

查看此页面: Predefined Constants (JSON)更具体地说是JSON_FORCE_OBJECT

如果深度超过responses的数据需要是一个数组,那么您需要首先对所有数据进行编码,然后对顶层进行编码。

enter image description here

$test = array(
    "responses" => array()
);

echo json_encode($test, JSON_FORCE_OBJECT);

答案 1 :(得分:-1)

如果您需要一个对象,那么您还需要在PHP中创建一个对象。只要您使用数组,PHP最好将它们编码为JSON数组。

$data = new stdClass;
$data->foo = 'bar';

echo json_encode(array($data));

或:

echo json_encode(array((object)array('foo' => 'bar')));

答案 2 :(得分:-1)

如果你使用 json_encode 这个函数,你可以尝试将选项JSON_FORCE_OBJECT添加为fllows。

<?php
$var = array();
$var['response'] = array();
echo json_encode($var, JSON_FORCE_OBJECT);

$var1 = array();
$var1['response'] = array();
$var1['response']['name'] = 'jediliang';
echo json_encode($var1, JSON_FORCE_OBJECT);
?>

输出如下:

{"response":{}}{"response":{"name":"jediliang"}}

答案 3 :(得分:-1)

有关更多说明,请尝试以下示例

class a {
    var $name;
};
$a = new a;
$a->name = array("name"=>"fname");
echo json_encode(array("a"=> $a, "name"=>array("fname","lname")));

希望它清除你所有的疑虑