我正在尝试使用以下代码从REST服务返回JSON:
$categories = $categoriesController->listAll();
if($categories){
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Content-Type: application/json");
echo json_encode($categories,JSON_PRETTY_PRINT);
}else{
}
但是我收到了这个错误:
json_encode()期望参数2为long,给定字符串
我看过几个例子使用完全相同的代码,所以我不明白为什么我会遇到这个问题。我很感激这个问题的一些帮助。谢谢:))
答案 0 :(得分:19)
常量JSON_PRETTY_PRINT
仅适用于PHP版本> = 5.4。
它的值为128,因此请尝试将JSON_PRETTY_PRINT
替换为128
echo json_encode($categories,128);
答案 1 :(得分:5)
JSON_PRETTY_PRINT
。
如果您希望在早期版本的PHP中使代码更具可读性,请使用这些常量而不是其数值。请注意,我将每个版本都变为可用 - 如果您在早期版本的PHP中使用选项,请不要指望它可以正常工作。
<?php
// json_encode() options
define('JSON_HEX_TAG', 1); // Since PHP 5.3.0
define('JSON_HEX_AMP', 2); // Since PHP 5.3.0
define('JSON_HEX_APOS', 4); // Since PHP 5.3.0
define('JSON_HEX_QUOT', 8); // Since PHP 5.3.0
define('JSON_FORCE_OBJECT', 16); // Since PHP 5.3.0
define('JSON_NUMERIC_CHECK', 32); // Since PHP 5.3.3
define('JSON_UNESCAPED_SLASHES', 64); // Since PHP 5.4.0
define('JSON_PRETTY_PRINT', 128); // Since PHP 5.4.0
define('JSON_UNESCAPED_UNICODE', 256); // Since PHP 5.4.0
// json_decode() options
define('JSON_OBJECT_AS_ARRAY', 1); // Since PHP 5.4.0
define('JSON_BIGINT_AS_STRING', 2); // Since PHP 5.4.0
define('JSON_PARSE_JAVASCRIPT', 4); // upgrade.php
// json_last_error() error codes
define('JSON_ERROR_NONE', 0); // Since PHP 5.3.0
define('JSON_ERROR_DEPTH', 1); // Since PHP 5.3.0
define('JSON_ERROR_STATE_MISMATCH', 2); // Since PHP 5.3.0
define('JSON_ERROR_CTRL_CHAR', 3); // Since PHP 5.3.0
define('JSON_ERROR_SYNTAX', 4); // Since PHP 5.3.0
define('JSON_ERROR_UTF8', 5); // Since PHP 5.3.3
define('JSON_ERROR_RECURSION', 6); // Since PHP 5.5.0
define('JSON_ERROR_INF_OR_NAN', 7); // Since PHP 5.5.0
define('JSON_ERROR_UNSUPPORTED_TYPE', 8); // Since PHP 5.5.0
?>
答案 2 :(得分:1)
JSON_PRETTY_PRINT
选项仅适用于PHP 5.4