PHP中var_dump与print_r结果差异及JSON转数组问题排查
看起来你在这里犯了一个常见的小错误——多做了一次不必要的json_encode操作,导致最终得到的不是数组而是字符串,咱们一步步来解决:
问题根源
你执行的代码是:
$array = json_decode(json_encode($data), True);
如果$data本身已经是JSON格式的字符串,那么json_encode($data)会把这个字符串转成转义后的JSON字符串(比如把原字符串里的双引号变成\"),再用json_decode解析的话,得到的还是原来的JSON字符串,而不是你想要的PHP数组。这就是为什么var_dump显示的是长度1578的字符串,而不是数组结构。
正确的转换方式
直接对原始的JSON字符串使用json_decode即可,不需要额外的json_encode:
// 假设 $data 是你的原始JSON字符串 $array = json_decode($data, true);
这里第二个参数true确保返回的是关联数组,而不是stdClass对象。
解决print_r内容省略的问题
print_r在输出过长内容时,不管是浏览器还是终端环境,都会自动截断显示。要完整查看数组内容,可以这样做:
- 浏览器环境:用
<pre>标签包裹输出,格式化且完整显示:
echo '<pre>'; print_r($array); echo '</pre>';
- 终端/命令行环境:可以使用
var_dump(它默认会完整输出),或者把print_r的结果保存到变量再输出:
$output = print_r($array, true); echo $output;
额外的排查技巧
如果转换后还是有问题,可以用json_last_error()检查JSON解析是否出错:
$array = json_decode($data, true); if (json_last_error() !== JSON_ERROR_NONE) { echo 'JSON解析失败: ' . json_last_error_msg(); }
这能帮你快速定位比如JSON格式不合法之类的问题。
内容的提问来源于stack exchange,提问作者Noman Ali
相关产品推荐
相关产品推荐

