[英]Empty array in PHP -> JSON -> JS = empty array in Javascript. How to get empty Object instead?
因此,这是将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创建一个对象(“ {}”)。
这是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不允许内置函数重载,因此您必须使用不同的名称定义函数。
我想这里最合理的答案是,最初交付空数组或对象可能没有意义。 简单检查javascript中是否存在即可解决该问题。
if (count($_results)) {
$this->_response['vendor'] = array();
foreach ($_results as $_row) {
$this->_response['vendor'][$_row['id']] = $_row;
}
}
echo(json_encode($this->_response));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.