在php开发中,将数组转换为json字符串是非常常见的操作,通常借助内置的json_encode函数就能实现,该函数支持多种参数配置,可以满足不同的格式化需求。
基础转换方法
使用json_encode函数可以直接将php数组转换为对应的json字符串,默认情况下转换后的字符串是紧凑格式,没有多余的空格和换行。
<?php
// 定义一个普通索引数组
$index_array = array('apple', 'banana', 'orange');
// 转换为json字符串
$index_json = json_encode($index_array);
echo $index_json;
// 输出结果:["apple","banana","orange"]
// 定义一个关联数组
$assoc_array = array(
'name' => '张三',
'age' => 25,
'hobby' => array('读书', '跑步')
);
$assoc_json = json_encode($assoc_array);
echo $assoc_json;
// 输出结果:{"name":"张三","age":25,"hobby":["读书","跑步"]}
?>
格式化输出参数
如果希望生成的json字符串带有缩进和换行,方便阅读调试,可以给json_encode函数传递第二个参数,常用的格式化参数如下:
- JSON_PRETTY_PRINT:使输出的json字符串带有缩进和换行,可读性更强
- JSON_UNESCAPED_UNICODE:中文不会被编码为unicode转义字符,直接显示中文
- JSON_UNESCAPED_SLASHES:不转义斜杠/,保持原始格式
多个参数可以通过按位或运算符|组合使用,下面是组合参数的示例:
<?php
$user_info = array(
'id' => 1001,
'username' => '李四',
'address' => 'https://ipipp.com/user/1001',
'tags' => array('php', '开发', '后端')
);
// 组合多个格式化参数
$format_json = json_encode($user_info, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
echo $format_json;
?>
上述代码输出的json字符串格式如下,带有清晰的缩进和换行,中文正常显示,斜杠也没有被转义:
{
"id": 1001,
"username": "李四",
"address": "https://ipipp.com/user/1001",
"tags": ["php", "开发", "后端"]
}
特殊类型数组处理
当数组中包含特殊类型的数据时,json_encode的处理规则需要注意:
- 布尔值true会转换为json的true,false转换为false
- null值会转换为json的null
- 数值类型会直接转换为对应的json数值
- 如果数组同时包含索引键和关联键,会优先按照关联数组的规则转换为json对象
下面是特殊类型数组的转换示例:
<?php
$special_array = array(
'status' => true,
'error' => null,
'code' => 200,
'msg' => '请求成功'
);
$special_json = json_encode($special_array, JSON_UNESCAPED_UNICODE);
echo $special_json;
// 输出结果:{"status":true,"error":null,"code":200,"msg":"请求成功"}
?>
常见注意事项
在使用json_encode转换数组时,有几个常见问题需要留意:
- 如果数组的键是整型,转换后json对象的键会自动转换为字符串类型
- 如果数组中包含资源类型(如数据库连接、文件句柄等),json_encode无法处理,会返回null
- 可以通过json_last_error函数获取转换过程中的错误信息,方便排查问题
错误排查的示例代码如下:
<?php
$test_array = array('name' => '测试');
$json_str = json_encode($test_array);
if (json_last_error() != JSON_ERROR_NONE) {
echo '转换出错,错误信息:' . json_last_error_msg();
} else {
echo '转换成功,结果:' . $json_str;
}
?>
phpjson_encode数组转jsonjson字符串修改时间:2026-07-15 20:51:19