因此,这是将我的JSON响应构建回JS的基础。
$this->_response['vendor'] = array();
foreach ($_results as $_row) {
$this->_response['vendor'][$_row['id']] = $_row;
}
echo(json_encode($this->_response));
这很好并且在javascript中构建对象,除非没有结果。在这种情况下,php将其视为空数字数组,而不是关联数组。然后归结为javascript并转换为空数组而不是空对象。
我知道我可以通过检查事物,在javascript中预先声明变量作为对象等多种方式解决这个问题。我想知道是否有办法在php中声明一个空的关联数组,或者另一种强制json_encode来创建对象(“{}”)的方法。
答案 0 :(得分:0)
这是PHP的一个已知限制 - 因为它本身不支持JavaScript类型(例如对象),解码然后再次编码可能会导致数据丢失。
我使用这样的解决方法来保持JSON:
/**
* @param $input
* @return array
*/
public static function safeDecode($input) {
// Fix for PHP's issue with empty objects
$input = preg_replace('/{\s*}/', "{\"EMPTY_OBJECT\":true}", $input);
return json_decode($input, true);
}
/**
* @param array|object $input
* @return string
*/
public static function safeEncode($input) {
return preg_replace('/{"EMPTY_OBJECT"\s*:\s*true}/', '{}', json_encode($input));
}
它不理想但它有效。请注意,您可以:
因此,上面所示的像我这样的工作可能是目前唯一的选择。简而言之,您必须扩展PHP json_encode()和json_decode()。不幸的是,PHP不允许内置函数重载,所以你必须定义不同名称的函数。
答案 1 :(得分:-1)
我想这里最合理的答案是,首先提供空数组或对象可能没有意义。然后,简单检查javascript中是否存在就可以解决问题了。
if (count($_results)) {
$this->_response['vendor'] = array();
foreach ($_results as $_row) {
$this->_response['vendor'][$_row['id']] = $_row;
}
}
echo(json_encode($this->_response));