diamond-dove/simple-json

读取和写入大型JSON文件

v1.0.2 2022-12-14 23:09 UTC

This package is auto-updated.

Last update: 2024-09-07 05:00:27 UTC


README

此包简化了读取和写入简单JSON文件的过程。它使用生成器来最小化内存使用,即使在处理大文件时也能保持低内存消耗。

以下是如何读取JSON文件的一个示例

use DiamondDove\SimpleJson\SimpleJsonReader;

SimpleJsonReader::create('users.json')->get()
   ->each(function(array $user) {
        // process the row
    });

安装

您可以使用composer安装此包

composer require diamon-dove/simple-json

用法

读取JSON

假设您有一个包含以下内容的JSON文件

[
  {"email":  "john@example.com", "first_name":  "John"}, 
  {"email":  "jane@example.com", "first_name":  "jane"}
]

要在PHP中读取此文件,您可以这样做

use DiamondDove\SimpleJson\SimpleJsonReader;

// $records is an instance of Illuminate\Support\LazyCollection
$records = SimpleJsonReader::create($pathToJson)->get();

$records->each(function(array $user) {
   // in the first pass $user will contain
   // ['email' => 'john@example.com', 'first_name' => 'john']
});

使用LazyCollections进行处理

get将返回一个Illuminate\Support\LazyCollection的实例。此类是Laravel框架的一部分。在幕后使用生成器,因此即使对于大文件,内存使用也将保持低。

您可以在Laravel文档中找到可以在LazyCollection上使用的所有方法(可枚举合约)

以下是一个简单的示例,我们只想处理具有包含超过5个字符的first_name的行。

以下是一个简单的示例,我们只想处理具有包含超过5个字符的first_name的元素。

SimpleJsonReader::create($pathToJson)->get()
->filter(function(array $user) {
return strlen($user['first_name']) > 5;
})
->each(function(array $user) {
// processing user
});

写入文件

要写入JSON文件,可以使用以下代码

use DiamondDove\SimpleJson\SimpleJsonWriter;

$writer = SimpleJsonWriter::create($pathToJson)
->push([[
'first_name' => 'John',
'last_name' => 'Doe',
],
[
'first_name' => 'Jane',
'last_name' => 'Doe',
]
]);

pathToJson路径下的文件将包含

[
  {"first_name": "John", "last_name": "Doe"},
  {"first_name":  "Jane", "last_name":  "Doe"}
]

您也可以使用

SimpleJsonWriter::create($this->pathToJson)
                        ->push([
                            'name'  => 'Thomas',
                            'state' => 'Nigeria',
                            'age'   => 22,
                        ])
                        ->push([
                            'name'  => 'Luis',
                            'state' => 'Nigeria',
                            'age'   => 32,
                        ]);

测试

composer test

贡献

有关详细信息,请参阅CONTRIBUTING

安全性

如果您发现任何安全相关的问题,请通过电子邮件masterfermin02@gmail.com报告,而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证 (MIT)。有关更多信息,请参阅许可证文件。