json是字符串格式,数组是php数据结构;json需json_decode()转为数组或对象才能操作,数组可直接读写;json只有对象{}和数组[]两种结构,php数组分索引、关联、多维三类。

PHP 中的 JSON 和数组本质不同:JSON 是一种**字符串格式**,用于数据交换;数组是 PHP 内存中的一种**数据结构类型**。它们常被混用,但角色、行为和使用方式有明确区分。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
JSON 是文本,数组是变量
JSON(JavaScript Object Notation)本质上是一段符合特定语法规则的字符串,比如:
`'{"name":"张三","age":25}'` 或 `'["苹果","香蕉","橙子"]'`
它不能直接调用 PHP 方法(如 count()、array_push()),必须先用 json_decode() 转成 PHP 数组或对象才能操作。
而 PHP 数组是运行时可直接读写、增删、遍历的变量,例如:
$arr = ['苹果', '香蕉', '橙子'];
$user = ['name' => '张三', 'age' => 25];
数组有多种形态,JSON 只有两种结构
PHP 数组分为三类:
- 索引数组(数字下标,如 [0=>'a', 1=>'b'])
- 关联数组(字符串键名,如 ['name'=>'a', 'city'=>'b'])
- 多维数组(嵌套以上两种)
而 JSON 规范只定义两种基础结构:
- 对象(object):用 {} 包裹,对应 PHP 关联数组(键为字符串)
- 数组(array):用 [] 包裹,对应 PHP 索引数组(键为连续数字,且从 0 开始)
注意:PHP 中若数组键不连续或含字符串,json_encode() 默认会转成 JSON 对象而非 JSON 数组。
转换依赖明确参数,否则结果易出错
用 json_decode($json, $assoc) 解析时:
- 第二个参数 $assoc = true → 返回关联数组(可用 $arr['name'] 访问)
- $assoc = false(默认)→ 返回 stdClass 对象(需用 $obj->name 访问)
同样,json_encode() 的输出形式取决于输入数组的键类型:
- 全是数字键且连续 → 输出 JSON 数组(["a","b"])
- 含任意字符串键 → 输出 JSON 对象({"name":"a"})
- 混合键(如 [0=>'a', 'name'=>'b'])→ 也会转成 JSON 对象
行为差异直接影响开发逻辑
常见误区示例:
- 直接对 JSON 字符串用 count() 或 foreach 会报错或返回意外结果
- 误以为 json_decode('{"a":1,"b":2}') 是数组,实际是对象,$data['a'] 会报错,必须用 $data->a 或加 true 参数
- 使用 isset($json['key']) 前没解码,等同于检查字符串某位置字符,毫无意义
- 修改数据后忘记重新 json_encode(),前端收不到更新
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










