gemul/jsonparser

一个用于轻松处理JSON数据的PHP库

v1.0.2 2023-10-23 06:36 UTC

This package is auto-updated.

Last update: 2024-09-23 08:46:29 UTC


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'));

确保目录可写。