PHP中json_encode与json_decode的正确用法及避坑指南

季宁
季宁
发布时间:2026-10-13| 2人浏览过
原创

PHP原生提供 json_encode 和 json_decode 函数用于JSON数据的编码与解码。本文将详细说明这两个函数的核心用法,包括索引数组与关联数组的区别处理、类对象属性的筛选机制、如何强制解码为关联数组,以及常见的JSON格式陷阱。

目标与准备条件

使用PHP处理JSON数据需要确保PHP版本在5.2及以上。输入的数据必须符合UTF-8编码,否则编码结果可能为空。操作的核心在于理解PHP数组结构(索引/关联)与JSON结构(数组/对象)之间的映射关系,并遵循严格的JSON语法规范。

JSON编码:json_encode()

第1步:基本数据结构编码

目的:将PHP数组或对象转换为JSON字符串。

动作:调用 json_encode() 函数传入PHP变量。

<?php 
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 
echo json_encode($arr); 
?>

输出结果:

{"a":1,"b":2,"c":3,"d":4,"e":5}

第2步:处理索引数组与关联数组的差异

目的:根据前端需求生成正确的JSON数组格式 [] 或对象格式 {}。

入口:定义不同的数组类型。

  • 索引数组:仅包含值的数组会被转换为JSON数组。
$arr = Array('one', 'two', 'three'); 
echo json_encode($arr); 

输出:["one","two","three"]

  • 关联数组:包含键值对的数组会被转换为JSON对象。即使键是数字,也会被视为对象键。
$arr = Array('1'=>'one', '2'=>'two', '3'=>'three'); 
echo json_encode($arr);

输出变为:{"1":"one","2":"two","3":"three"}

第3步:强制索引数组转为对象

目的:当需要JSON对象格式但使用的是索引数组时,强制转换格式。

参数:使用 JSON_FORCE_OBJECT 常量或类型转换。

// 方法一:类型转换
json_encode( (object)$arr ); 

// 方法二:使用常量
json_encode ( $arr, JSON_FORCE_OBJECT );

第4步:类对象的编码限制

目的:了解对象属性在JSON中的可见性规则。

动作:对类的实例进行编码。

class Foo { 
    const   ERROR_CODE = '404'; 
    public  $public_ex = 'this is public'; 
    private  $private_ex = 'this is private!'; 
    protected $protected_ex = 'should be protected'; 
    public function getErrorCode() { 
        return self::ERROR_CODE; 
    } 
} 

$foo = new Foo;
echo json_encode($foo); 

完成状态:只有 public 属性被输出:{"public_ex":"this is public"}。常量、私有变量、保护变量和方法均不会出现在JSON中。

JSON解码:json_decode()

第1步:基础解码与默认行为

目的:将JSON文本转换为PHP数据结构,默认为对象。

动作:传入JSON字符串。

$json = '{"foo": 12345}'; 
$obj = json_decode($json); 
print $obj->foo; // 输出: 12345

第2步:强制生成关联数组

目的:若需要将JSON对象转换为PHP关联数组以便通过 [] 访问。

参数:设置第二个参数为 true。

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 
$arr = json_decode($json, true); 
var_dump($arr);

结果:生成一个标准的PHP关联数组 array(5) { ... }。

排错与常见错误

执行 json_decode() 失败时通常返回 null,并可通过 json_last_error_msg() 获取错误信息。以下是三种常见的非法JSON写法及其修正:

  1. 引号错误:JSON字符串分隔符必须使用双引号 ",不能使用单引号 '。
    $bad_json = "{ 'bar': 'baz' }"; // 错误
  2. 键名未加引号:JSON对象的键(冒号左侧)必须始终使用双引号。
    $bad_json = '{ bar: "baz" }'; // 错误
  3. 尾随逗号:最后一个元素后不能添加逗号。
    $bad_json = '{ "bar": "baz", }'; // 错误

注意:如果尝试解码非JSON字符串(如纯文本 "Hello World" 或数值),json_decode() 同样会返回 null。JSON仅支持对象和数组类型的复杂结构。

简要总结

掌握 json_encode 和 json_decode 的关键在于理解数组结构与JSON类型的对应关系,并注意编码时的字符集要求及语法规范性。正确使用可选参数可以灵活控制数据结构,从而适应不同的业务场景需求。

以上就是PHP语言中使用JSON编码和解还原成数组的详细内容,更多关于PHP JSON数据处理技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。