一个高效、易于使用且快速的 JSON 流/拉取/增量/懒惰(无论你怎么称呼它)解析器,基于为不可预测长度的 JSON 流或文档开发的生成器。
特点
- 常量内存占用,用于不可预测的大型JSON文档。
- 易于使用。只需用
foreach
迭代任何大小的JSON,无需事件和回调。 - 对文档中由JSON Pointer指定的任何子树进行高效迭代
- 速度。关键性能代码在JIT的考虑下进行了速度优化,并使用原生
json_decode
来解码JSON文档项,这是默认设置。请参见解码器。 - 解析不仅限于流,还可以解析任何生成JSON块的可迭代对象。
- 经过彻底测试。超过200个测试和1000个断言。
使用方法:安装后,请按以下步骤进行解析,直接引入即可。
解析文档
假设 fruits.json
包含这个巨大的JSON文档:
// fruits.json
{
"apple": {
"color": "red"
},
"pear": {
"color": "yellow"
}
}
解析:
<?php
use \JsonMachine\Items;
$fruits = Items::fromFile('fruits.json');
foreach ($fruits as $name => $data) {
// 1st iteration: $name === "apple" and $data->color === "red"
// 2nd iteration: $name === "pear" and $data->color === "yellow"
}
解析一个JSON数组而不是一个JSON对象遵循相同的逻辑。 在foreach中的键将是一个项目的数值索引。
如果你更喜欢JSON Machine以数组而不是对象的形式返回,使用new ExtJsonDecoder(true)
作为解码器。
<?php
use JsonMachine\JsonDecoder\ExtJsonDecoder;
use JsonMachine\Items;
$objects = Items::fromFile('path/to.json', ['decoder' => new ExtJsonDecoder(true)]);
解析子树
如果你只想迭代 results
这个子树 fruits.json
:
// fruits.json
{
"results": {
"apple": {
"color": "red"
},
"pear": {
"color": "yellow"
}
}
}
使用JSON Pointer /results
作为 pointer
选项:
<?php
use \JsonMachine\Items;
$fruits = Items::fromFile('fruits.json', ['pointer' => '/results']);
foreach ($fruits as $name => $data) {
// The same as above, which means:
// 1st iteration: $name === "apple" and $data->color === "red"
// 2nd iteration: $name === "pear" and $data->color === "yellow"
}
值results
不是一次性加载到内存中,而是在 results
中只加载一个项目。在你当前迭代的层次/子树中,内存中总是有一个项目。因此,内存消耗是恒定的。
更多介绍:插件介绍
1.0.0 2025-09-22 >= HkCms_2.3.0
发布了第一个版本
博文
问答
相关应用
推荐应用