PHP中JSON数据的编码与解码实战指南

Cora
Cora
发布时间:2026-10-14 | 2人浏览过
原创

在PHP开发中,处理前端请求或API接口时,JSON是最常用的数据交换格式。从PHP 5.2版本开始,语言原生提供了 json_encode()(编码)和 json_decode()(解码)两个核心函数。本文将梳理这两个函数的操作逻辑、参数配置及常见陷阱,帮助开发者准确进行数据类型转换。

结果或目标

使用JSON库将PHP数据结构(如数组、类对象)序列化为标准JSON字符串,或将接收到的JSON字符串反序列化为PHP可用的变量结构,确保数据在不同系统间无损传输。

准备条件

  1. 环境要求:PHP版本需 5.2及以上。
  2. 编码规范:传入 json_encode() 的参数必须是 UTF-8 编码。若源数据为 GB2312 等编码,请先使用 iconv('GB2312', 'UTF-8', $data) 转换,否则可能返回空字符串或 null。

真实操作顺序

第1步:使用 json_encode 将数据转为 JSON 字符串

目的:将PHP变量转换为JSON格式的文本,用于网络传输或存储。

操作说明:

  • 数组转换差异:
    • 索引数组(连续整数键):输出为标准数组格式 []。
      复制代码 代码如下:
      <?php
      $arr = array('a'=>1,'b'=>2,'c'=>3);
      echo json_encode($arr);
      // 输出: {"a":1,"b":2,"c":3}
      // 注意:如果是纯索引 ['one','two'], 则输出: ["one","two"]
      ?>
    • 关联数组(字符串键或不连续整键):输出为对象格式 {}。
      复制代码 代码如下:
      <?php
      $arr = Array('1'=>'one', '2'=>'two');
      echo json_encode($arr);
      // 输出: {"1":"one","2":"two"}
      ?>
    • 强制转换技巧:若需将索引数组强制转为JSON对象 {},可使用 (object) 强转或添加 JSON_FORCE_OBJECT 标志:json_encode($arr, JSON_FORCE_OBJECT);
  • 类对象处理:
    只有 public 属性会被序列化;private、protected 属性及常量、方法均会被丢弃。
    复制代码 代码如下:
    <?php
    class Foo {
        public $name = 'test';
        private $secret = 'pwd';
    }
    $foo = new Foo;
    echo json_encode($foo);
    // 仅输出: {"name":"test"}
    ?>

第2步:使用 json_decode 解析 JSON 文本

目的:将字符串形式的JSON还原为PHP对象或数组。

操作说明:

  • 默认行为:函数返回一个 stdClass 对象。可通过 > 操作符访问属性。
    复制代码 代码如下:
    <?php
    $json = '{"foo": 12345}';
    $obj = json_decode($json);
    print $obj->foo; // 输出: 12345
    ?>
  • 转换为关联数组:若需获取数组结构以便使用数组函数(如循环遍历),需在第二个参数传入布尔值 true。
    复制代码 代码如下:
    <?php
    $json = '{"a":1,"b":2}';
    $array = json_decode($json, true);
    print_r($array);
    // 输出数组: ["a"=>1, "b"=>2]
    ?>

原文有依据的排错

在使用 json_decode() 时,如果返回值是 null 但无法确定原因,通常由以下三类错误导致:

  1. 分隔符错误:JSON标准要求必须使用双引号 " 包裹键名和字符串值,不支持单引号 '。
    "{ 'bar': 'baz' }" 为非法格式。
  2. 键名未加引号:JSON对象的键名(冒号左侧)在任何情况下都必须是字符串并加上双引号。
    "{ bar: \"baz\" }" 会报错。
  3. 尾随逗号:JSON不允许最后一个元素后存在逗号。
    "{ \"bar\": \"baz\", }" 为非法格式。
  4. 输入非JSON字符串:如果对普通字符串或数值调用 json_decode()(如 json_decode("Hello World")),也会返回 null。

建议在处理前检查 json_last_error_msg() 以获取详细的解析错误信息。

简要总结

PHP中的JSON处理关键在于对数组类型的区分以及编码的一致性。编码时需留意UTF-8及public属性限制;解码时需根据业务需求选择返回对象还是数组,并严格遵循JSON语法规则以避免解析失败。以上就是PHP中JSON的使用与转换的详细内容,更多关于PHP数据处理教程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表