diamond-dove / simple-json
读取和写入大型JSON文件
v1.0.2
2022-12-14 23:09 UTC
Requires
- php: ^8.0
- illuminate/support: ^6.3|^7.0|^8.0
- jajo/jsondb: ^3.0
- spatie/temporary-directory: ^2.0
Requires (Dev)
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)。有关更多信息,请参阅许可证文件。