PHP 数组转 JSON — 将 PHP 数组语法转换为 JSON
将 PHP 数组语法转换为 JSON。支持短数组和长数组语法、关联键、尾随逗号 —— 全部在浏览器中完成,无需上传。
PHP Array to JSON
Convert PHP array syntax to JSON. Handles nested arrays and associative arrays. Works entirely in your browser.
PHP 数组语法和 JSON 看起来足够相似,以至于有人会把它们当作可互换的格式来用;但它们又有着足够多的差异,使得直接复制粘贴必然出错。PHP 用 => 表示键值对,而 JSON 用 :。PHP 允许不加引号的字符串键,而 JSON 要求使用双引号字符串。PHP 使用 array() 或 [...],而 JSON 用 {} 表示对象、[...] 仅表示数组。这些差异看起来都是表面的 —— 语义完全一致 —— 但语法上的鸿沟足够大,以至于手工转换一个深度嵌套的 PHP 配置数组既繁琐又容易出错。
解析器会自动处理最常见的五种 PHP 到 JSON 转换陷阱。字符串键:[name => 'Alice'] 会变成 {"name": "Alice"}。常量:[flag => true] 中 flag 未加引号,会变成 {"flag": true},因为已识别的常量名会映射。尾随逗号:[1, 2, 3,] 会丢弃最后一个逗号。短数组语法:[...] 是默认形式,会根据键的类型输出 JSON 对象或数组。转换是单向的,但输出始终是合法的 JSON。
这个工具最真实的用武之地是 Laravel 到前端的数据交接。Laravel 开发者用 PHP 语法写配置数组,前端开发者则需要同样的数据作为 JSON 对象,供 JavaScript 或 TypeScript 组件使用。与其在 Blade 模板中用 @json() 内嵌 PHP 数组,不如走一次 JSON 来回 —— JSON 输出是一个静态产物,可以提交到前端仓库、独立版本化,并由 TypeScript 编译器做类型检查。
使用方法
粘贴 PHP 数组
粘贴 PHP 数组字面量,可使用短语法 `[...]` 或旧式 `array(...)`。解析器会按照真实 PHP 代码中的写法处理关联键、嵌套数组、字符串引号以及整数值。
查看 JSON 输出
输出为带美化缩进的标准 JSON。null、布尔和数值类型会自动推断:PHP 的 `null` 转为 JSON null,PHP 的 `true`/`false` 转为 JSON 布尔值,裸露的数字字面量转为 JSON 数字。
复制或下载 JSON
把 JSON 复制到剪贴板,或下载为 .json 文件。输出符合 RFC 8259 标准,任何标准的 JSON 解析器都能正确解析。
常见问题
它如何处理 PHP 常量和表达式?
PHP 常量(如 `PHP_EOL`、`true`、`false`、`null`)会被解析:`true` → `true`,`false` → `false`,`null` → `null`。无法识别的常量和函数调用会被包裹为字符串,内容为源码字面量。算术表达式不会求值 —— `1 + 2` 会保留为字符串 `'1 + 2'`。
heredoc 和 nowdoc 字符串语法如何处理?
heredoc 和 nowdoc 字符串会被拆开,内部文本按 JSON 字符串处理。heredoc 中的前置缩进会按照 PHP 7.3 灵活 heredoc 规则剥离。空 heredoc 转为空 JSON 字符串。
能处理包含多个数组定义的 PHP 文件吗?
解析器只提取遇到的第一个顶层数组字面量。如果 PHP 文件中有多个数组(例如配置文件中有多个 `return [...]` 语句),只会转换第一个。如需完整覆盖,请分别粘贴每个数组。
PHP 整数键在 JSON 输出中如何处理?
使用顺序整数键(0、1、2...)的 PHP 数组会转为 JSON 数组。使用稀疏或字符串键的 PHP 数组会转为 JSON 对象。如果 PHP 数组同时混用了数字键和字符串键,输出会是 JSON 对象,数字键作为字符串属性名。
会保留源码中的尾随逗号吗?
PHP 数组中的尾随逗号在解析时会被静默忽略 —— 这是 PHP 的语法便利,在 JSON 中没有对应含义。输出的 JSON 不包含尾随逗号,因为 JSON 语法本身不允许。
限制说明
- 不做表达式求值函数调用、变量引用以及内联计算不会被求值。`['date' => date('Y-m-d')]` 会变成 `{"date": "date('Y-m-d')"}` —— 一个字符串,而不是求值结果。
- 未加引号的字符串键解析结果可能不符预期PHP 允许不加引号的字符串键,例如 `[key => value]`。解析器会将其视为字符串键。如果未加引号的键与已识别常量名重名,则会使用该常量的值 —— `[true => 1]` 会变成 `{"1": 1}`。
- 假定源码每条记录为单行解析器对格式良好的 PHP 数组处理效果最佳。经过压缩或单行的 PHP 数组也能正确解析,但在输入有错时给出的错误信息不够友好。
平台说明
- macOS
- PHPStorm 和 VS Code 都能很好地格式化 PHP 数组。如果要把聊天或邮件中的 PHP 数组片段转换为 JSON 以便在非 PHP 工具中使用,浏览器工具是正确选择。
- Linux
- 命令行场景下,`php -r 'echo json_encode([...]);'` 可以完成同样的转换。在没有 PHP 运行环境的场景下,浏览器工具更合适。
- Web
- 完全在客户端运行;加载完成后支持离线使用。