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

Php 将{}作为输出而不是[]获取,php,json,kohana,Php,Json,Kohana,我有返回场馆菜单的服务,但如果菜单不存在,我应该返回{}作为输出,否则ios应用程序无法解析响应,应用程序将销毁。 现在,Response看起来像: { "response": [] } 我应该 { "response": {} } 用PHP编程的API服务。 当菜单为空url时: 存在某些菜单时: 创建响应的代码: 在“之后”功能中: $this->response->body(json_encode(array('response' => $this-&

我有返回场馆菜单的服务,但如果菜单不存在,我应该返回{}作为输出,否则ios应用程序无法解析响应,应用程序将销毁。 现在,Response看起来像:

{
    "response": []
}
我应该

{
    "response": {}
}
用PHP编程的API服务。 当菜单为空url时: 存在某些菜单时:

创建响应的代码: 在“之后”功能中:

$this->response->body(json_encode(array('response' => $this->response_json)));
没有菜单时:

$this->response_json = array();
查看此页面:
更具体地说,
JSON\u FORCE\u对象

如果深度大于
响应
的数据需要是一个数组,那么您需要先对所有数据进行循环编码,然后对顶层进行编码

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

echo json_encode($test, JSON_FORCE_OBJECT);


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

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

echo json_encode(array($data));
或:


如果使用json\u encode此函数,可以尝试将选项json\u FORCE\u 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);
?>

要了解更多信息,请尝试以下示例

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

希望它能消除你所有的疑虑

没什么要紧的都是阵列?你有什么问题要问我们吗?显示不适用于您的代码我无法格式化第二个array@user3815581只需向我们展示用于创建json响应的代码,我看到您终于添加了代码。我认为jshthornton的回答最适合你。快速解决方法是将
array()
更改为
(object)array()
我可以创建空对象吗?它应该是{}是的,
新stdClass
(object)array()
将是一个空对象。我想你那边有个问题。如果你在做API开发,我能让你对这个实用程序脚本感兴趣吗:
JSON\u FORCE\u OBJECT
将强制所有东西都成为一个对象<代码>数组('foo')将变成
{“0”:“foo”}
。“这并不总是想要的。”我知道,我很快就把它放在一边。OP从来没有提到他需要它,所以我没有进一步讨论。
{"response":{}}{"response":{"name":"jediliang"}}
class a {
    var $name;
};
$a = new a;
$a->name = array("name"=>"fname");
echo json_encode(array("a"=> $a, "name"=>array("fname","lname")));