json_encode()期望参数2为long,给定字符串

时间:2014-03-05 20:45:57

标签: 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{

}

但是我收到了这个错误:

  

json_encode()期望参数2为long,给定字符串

我看过几个例子使用完全相同的代码,所以我不明白为什么我会遇到这个问题。我很感激这个问题的一些帮助。谢谢:))

3 个答案:

答案 0 :(得分:19)

常量JSON_PRETTY_PRINT仅适用于PHP版本> = 5.4。 它的值为128,因此请尝试将JSON_PRETTY_PRINT替换为128

echo json_encode($categories,128);

答案 1 :(得分:5)

PHP 5.4.0中引入了

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