gemul / jsonparser
一个用于轻松处理JSON数据的PHP库
Requires
- php: >=7.0.1
README
简介
欢迎使用PHP JSON库,这是一个简单的工具,用于处理PHP应用程序中的JSON数据。此库提供了一组函数,用于从字符串或文件中读取JSON数据,操作JSON数据,并通过返回默认值来方便地处理JSON结构中不存在键的情况。
功能
-
从字符串读取JSON:轻松解析字符串中的JSON数据,并在PHP应用程序中对其进行处理。
-
从文件读取JSON:快速从文件读取JSON数据,简化了处理外部JSON文件的过程。
-
操作JSON数据:对您的JSON数据进行各种操作,例如添加、更新或删除键,所有这些操作都通过简单直观的API完成。
-
默认值处理:通过指定默认值来处理JSON中不存在键的情况,防止代码中出现意外的错误。
安装
要开始使用,您可以使用Composer安装此库
composer require gemul/jsonparser
用法
1. 加载JSON数据
从字符串读取JSON
$json = new \Gemul\JsonParser($json_string);
或从JSON文件
$json = new \Gemul\JsonParser(storage_path('/app/public/dummy.json'));
您还可以在构造函数的第二个参数中定义用于遍历json树的分隔字符串(默认为"。")。
$json = new \Gemul\JsonParser($json_string,'->');
2. 获取JSON数据
给定此json结构
{ "openapi": "3.0.3", "info": { "title": "Swagger Petstore - OpenAPI 3.0", "description": "This is a sample", "contact": { "email": "apiteam@swagger.io" } }, "externalDocs": { "description": "Find out more about Swagger", "url": "https://swagger.org.cn" }, "servers": [ { "url": "https://petstore2.swagger.io/api/v2" }, { "url": "https://petstore3.swagger.io/api/v3" } ], ... }
您可以使用 getItem(path,[默认值])
来遍历json树并获取数据。
$json->getItem('openapi'); // 3.0.3 $json->getItem('info.title'); // Swagger Petstore - OpenAPI 3.0 $json->getItem('info.contact.email'); // apiteam@swagger.io $json->getItem('servers.1.url'); // https://petstore3.swagger.io/api/v3
它还可以返回json的其余分支,例如
$json->getItem('info.contact'); // stdClass {"email": "apiteam@swagger.io"}
处理不存在的路径
如果路径不存在,则返回默认值,默认为null(默认)或您在第二个参数中放入的任何内容。即使整个路径不存在,它也不会抛出'未定义属性'异常。因此,您可以安全地进行遍历,而无需在每一层都进行检查。
$json->getItem('info.contact.phone'); // null (path not found in tree, default to null) $json->getItem('info.contact.phone',1234); // 1234 (set the default to 1234 instead of null) $json->getItem('info.foo.bar',false); // false (doesn't throw 'Undefined property "foo"' exception)
3. 设置JSON数据
为了将数据设置到树中,您可以使用 setItem(path,value)
例如
$json->setItem('info.version','1.0.0');
json将变成
{ "openapi": "3.0.3", "info": { "title": "Swagger Petstore - OpenAPI 3.0", "description": "This is a sample", "contact": { "email": "apiteam@swagger.io" }, "version": "1.0.0" }, ...
您可以安全地在路径上创建新深度
$json->setItem('info.foo.bar.baz','somevalue');
{ "openapi": "3.0.3", "info": { "foo": { "bar": { "baz": "somevalue" } }, "title": "Swagger Petstore - OpenAPI 3.0", ...
设置数组
对于数组数据,您可以使用索引,或者使用'[]'来更改或追加元素到现有数组或新数组中。
$json->setItem('servers.2.url', "new url"); //or $json->setItem('servers.[].url', "new url");
将产生
... "servers": [ { "url": "https://petstore2.swagger.io/api/v2" }, { "url": "https://petstore3.swagger.io/api/v3" }, { "url": "new url" } ], ...
3. 获取最后一个有效路径
执行 getItem()
后,您可以使用 getLastValidPath()
来检索由getItem方法成功遍历的最后一个有效路径。
$json->getItem('info.contact.phone.home'); //will return "info.contact", because from 'phone' onward doesn't exist
4. 获取当前完整的JSON对象
要获取当前json作为对象,请使用 getJsonObject()
。或者,您也可以使用 getJsonString()
获取json编码的字符串。
5. 将JSON字符串保存到文件
要保存JSON字符串,请使用 saveAs(file_path)
$json->saveAs(storage_path('/app/public/result.json'));
确保目录可写。