Php json_encode()要求参数2为长字符串

Php json_encode()要求参数2为长字符串,php,json,Php,Json,我尝试使用以下代码从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{ }

我尝试使用以下代码从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为长字符串


我见过几个例子使用完全相同的代码,所以我不明白为什么会出现这个问题。我很感激你能帮我解决这个问题。谢谢:)

JSON\u PRETTY\u PRINT选项仅在PHP 5.4版本中可用

常量
JSON\u PRETTY\u PRINT
仅在PHP版本>=5.4时可用。 它的值是128,所以请尝试将
JSON\u PRETTY\u PRINT
替换为128

echo json_encode($categories,128);

JSON\u PRETTY\u 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
?>


您的服务器运行哪个版本的PHP?至少升级到PHP5.4.0以使用
JSON\u PRETTY\u PRINT
。(您可能希望启用通知,它会告诉您它不知道常数)@winterblood:我正在运行5.3.1,这就解释了问题。非常感谢:)