PHP格式化JSON字符串的函数有哪些

来源:IPIPP.com作者:头衔:全栈工程师
导读:本期聚焦于小伙伴创作的《PHP格式化JSON字符串的函数有哪些》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《PHP格式化JSON字符串的函数有哪些》有用,将其分享出去将是对创作者最好的鼓励。

在PHP开发中,处理JSON数据是常见操作,格式化JSON字符串能让数据展示更清晰,便于调试和查看。PHP提供了多个相关函数来完成JSON格式化工作,下面逐一介绍这些函数的用法。

PHP格式化JSON字符串的函数有哪些

json_encode函数

json_encode是PHP中最常用的将数组或对象转换为JSON字符串的函数,通过配置参数可以实现JSON字符串的格式化输出。其核心格式化参数是JSON_PRETTY_PRINT,开启后会在JSON字符串中添加换行和缩进,让结构更清晰。

除了JSON_PRETTY_PRINT,还可以搭配JSON_UNESCAPED_UNICODE参数,避免中文被转义为Unicode编码,让输出更易读。

<?php
// 定义测试数组
$data = [
    'name' => '张三',
    'age' => 25,
    'hobby' => ['读书', '跑步', '编程']
];

// 普通转换,无格式化
$normalJson = json_encode($data);
echo "普通JSON字符串:\n";
echo $normalJson . "\n\n";

// 格式化输出,保留中文
$prettyJson = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo "格式化JSON字符串:\n";
echo $prettyJson . "\n";
?>

json_decode函数

json_decode函数的作用是将JSON字符串转换为PHP数组或对象,虽然它本身不直接格式化JSON字符串,但配合json_encode可以实现JSON字符串的重新格式化。比如当拿到一个压缩的JSON字符串时,可以先解码再编码并设置格式化参数,得到格式化的结果。

<?php
// 压缩的JSON字符串
$compressedJson = '{"name":"李四","age":30,"score":{"math":95,"english":88}}';

// 先解码为数组
$decodedData = json_decode($compressedJson, true);

// 再编码为格式化的JSON字符串
$formattedJson = json_encode($decodedData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo "格式化后的JSON字符串:\n";
echo $formattedJson . "\n";
?>

自定义格式化函数

如果需要对JSON格式化有更个性化的控制,比如自定义缩进字符、调整换行规则,可以自己编写格式化函数,通过解析JSON字符串的结构手动添加缩进和换行。

<?php
/**
 * 自定义JSON格式化函数
 * @param string $json 待格式化的JSON字符串
 * @param string $indent 缩进字符,默认4个空格
 * @return string 格式化后的JSON字符串
 */
function customFormatJson($json, $indent = '    ') {
    $result = '';
    $level = 0;
    $inString = false;
    $len = strlen($json);
    
    for ($i = 0; $i < $len; $i++) {
        $char = $json[$i];
        // 处理字符串内部内容
        if ($char === '"' && ($i === 0 || $json[$i-1] !== '\\')) {
            $inString = !$inString;
        }
        // 非字符串内的结构符号处理
        if (!$inString) {
            if ($char === '{' || $char === '[') {
                $result .= $char . "\n" . str_repeat($indent, $level + 1);
                $level++;
                continue;
            } elseif ($char === '}' || $char === ']') {
                $level--;
                $result .= "\n" . str_repeat($indent, $level) . $char;
                continue;
            } elseif ($char === ',') {
                $result .= $char . "\n" . str_repeat($indent, $level);
                continue;
            } elseif ($char === ':') {
                $result .= ': ';
                continue;
            }
        }
        $result .= $char;
    }
    return $result;
}

// 测试自定义格式化函数
$testJson = '{"id":1,"info":{"title":"测试","count":10},"list":[1,2,3]}';
echo "自定义格式化结果:\n";
echo customFormatJson($testJson);
?>

函数使用场景对比

不同格式化方式适合不同的使用场景,下面通过表格对比各方式的特点:

方式优点缺点适用场景
json_encode+JSON_PRETTY_PRINT原生函数,使用简单,参数配置灵活缩进和格式规则固定,无法深度自定义常规JSON格式化需求,快速调试输出
json_decode+json_encode组合可以处理已有的压缩JSON字符串需要两次编码解码,性能略有损耗处理外部传入的未格式化JSON字符串
自定义格式化函数可完全自定义格式规则,灵活度高需要自己编写代码,可能存在边界情况bug有特殊格式化要求,原生函数无法满足的场景

注意事项

  • 使用json_encode时要注意数据的编码,避免出现编码错误导致JSON生成失败,可以使用JSON_UNESCAPED_UNICODE保证中文正常显示。
  • json_decode的第二个参数设为true时返回数组,设为false时返回对象,根据实际需求选择。
  • 自定义格式化函数需要处理JSON字符串中的转义字符,避免错误拆分结构。

通过上述几种方式,开发者可以根据实际需求选择合适的PHP函数来格式化JSON字符串,提升开发过程中的数据查看和调试效率。

json_encodejson_decodeJSON_PRETTY_PRINTJSON_UNESCAPED_UNICODEphp_json修改时间:2026-06-04 06:36:44

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。