PHPackages                             ybushenko/json-parser - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. ybushenko/json-parser

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

ybushenko/json-parser
=====================

Parse json

v1.0(5y ago)38PHP

Since Sep 2Pushed 5y ago1 watchersCompare

[ Source](https://github.com/Nastro/json-parser)[ Packagist](https://packagist.org/packages/ybushenko/json-parser)[ RSS](/packages/ybushenko-json-parser/feed)WikiDiscussions master Synced today

READMEChangelog (1)Dependencies (2)Versions (2)Used By (0)

Json-parser
===========

[](#json-parser)

[![GitHub release (latest by date)](https://camo.githubusercontent.com/1d13a3678c2a9df0a4a7599418ccd84c262a2b94734d476e6806684cff913b02/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f4e617374726f2f6a736f6e2d706172736572)](https://camo.githubusercontent.com/1d13a3678c2a9df0a4a7599418ccd84c262a2b94734d476e6806684cff913b02/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f4e617374726f2f6a736f6e2d706172736572)[![build](https://github.com/Nastro/json-parser/workflows/build/badge.svg)](https://github.com/Nastro/json-parser/workflows/build/badge.svg)[![codecov](https://camo.githubusercontent.com/93e95afe77744052b7f14021c06a3e66f0fcf7f57d6fa9daa6c18d141715053b/68747470733a2f2f636f6465636f762e696f2f67682f4e617374726f2f6a736f6e2d7061727365722f6272616e63682f6d61737465722f67726170682f62616467652e737667)](https://codecov.io/gh/Nastro/json-parser)

Json-parser - это универсальный парсер, который с помощью определенных правил, переводит json в массив PHP, при этом в качестве источника данных может использоваться файл, текст или url.

```
use JsonParser\Config;
use JsonParser\JsonParser;
use JsonParser\Rules\CallableRule;
use JsonParser\Rules\DotPathRule;
use JsonParser\Loader\TextLoader;

$json =  new DotPathRule('names.ru_name'),
    'en_name' => new DotPathRule('names.en_name'),
    'custom' => new CallableRule(function ($item) {
        return $item['names']['ru_name'].$item['names']['en_name'];
    })
];

$config = (new Config($rules))
    ->setLoader(new TextLoader($json))
    ->setBasePath('data.goods')
    ->setIgnoreErrors(true);

$result = (new JsonParser($config))->parse();
var_dump($result);
```

Результат:

```
array(3) {
  [0] => array(3) {
    'ru_name' => string(14) "Печенье"
    'en_name' => string(6) "Cookie"
    'custom' => string(20) "ПеченьеCookie"
  }
  [1] => array(3) {
    'ru_name' => string(12) "Молоко"
    'en_name' => string(4) "Milk"
    'custom' => string(16) "МолокоMilk"
  }
  [2] => array(3) {
    'ru_name' => string(12) "Яблоко"
    'en_name' => string(5) "Apple"
    'custom' => string(17) "ЯблокоApple"
  }
}

```

### Установка

[](#установка)

`composer require ybushenko/json-parser`

### Источник данных (Loader)

[](#источник-данных-loader)

#### Текст (TextLoader)

[](#текст-textloader)

Для использования текстового источника данных, достаточно в конструктор `TextLoader` передать json в виде текста:

```
$loader = new JsonParser\Loader\TextLoader('[{"name": "a", "text": "foo"}, {"name": "b", "text": "bar"}]');
```

#### Файл (FileLoader)

[](#файл-fileloader)

Для того, чтобы загрузка json происходила из файла, нужно передать в конструктор `FileLoader` абсолютный путь до файла:

```
$loader = new JsonParser\Loader\FileLoader(__DIR__ . '/data/goods.json');
```

#### Url (UrlLoader)

[](#url-urlloader)

Также возможно загружать json по url, для этого нужно использовать `UrlLoader`. Вторым аргументом можно передать клиент для http запросов совместимый с `GuzzleHttp\ClientInterface`

```
$loader = new JsonParser\Loader\UrlLoader('http://url');
```

### Правила обработки (Rules)

[](#правила-обработки-rules)

Для преобразования данных в массив используются специальные правила, с помощью которых можно получать данные и преобразовывать их в нужный вид

#### Путь через точку (DotPathRule)

[](#путь-через-точку-dotpathrule)

При использовании данного правила, парсер будет пытаться получить данные по указанному пути.

```
$rule = new \JsonParser\Rules\DotPathRule('path.to.node');
```

#### Массив данных (ArrayRule)

[](#массив-данных-arrayrule)

При использовании данного правила, парсер будет пытаться получить данные по указанному пути и вернет массив массивов с указанными нодами во втором аргументе.

```
$rule = new \JsonParser\Rules\ArrayRule('path.to.nodes', ['node1', 'node2', 'node3']);
```

#### Кастомная обработка (CallableRule)

[](#кастомная-обработка-callablerule)

Для собственной обработки значения можно использовать `CallableRule`. Правило принимает анонимную функцию, и в качестве входного аргумента передаст объект целиком, чтобы пользователь смог обработать значение сам.

```
$rule = new \JsonParser\Rules\CallableRule(function ($item) { return $item['node']; });
```

#### Из словаря (FromDictionaryRule)

[](#из-словаря-fromdictionaryrule)

Для того, чтобы использовать данное правило, для начала нужно добавить словарь в объект парсера:

```
$parser = new \JsonParser\JsonParser($config);
$parser->addDictionary('name', [1 => 'foo', 2 => 'bar']);
```

Первым аргументом метода `addDictionary` выступает имя словаря, которое потребуется в будущем, вторым аргументом может быть либо массив(как в примере выше), либо строка с путем через точку до массива данных в самом json. Например:

```
$parser = new \JsonParser\JsonParser($config);
$parser->addDictionary('name', 'path.to.categories');
```

В этом случае в качестве словаря будет использоваться сам json, а точнее его часть указанная во втором аргументе. Для того, чтобы словарь мог использоваться парсером, он должен состоять из ключ-значение. В качестве значения допускается массив, объект и другие типы.

Правило используется таким образом:

```
$rule = new \JsonParser\Rules\FromDictionaryRule('name', 'path.to.node_id');
```

Для начала парсер будет пытаться получить значение из `path.to.node_id`, а дальше сопоставит это значение со значением из словаря. Если такое значение в словаре будет найдено, то он заменит его.

Дополнительно полученное значение можно обработать (например удалить начальные и конечные пробелы), для этого используется третий аргумент, который принимает анонимную функцию:

```
$rule = new \JsonParser\Rules\FromDictionaryRule('name', 'path.to.node_id', function ($value) {
    return trim($value);
});
```

### Настройки

[](#настройки)

#### Игнорирование ошибок (setIgnoreErrors)

[](#игнорирование-ошибок-setignoreerrors)

Для проверки целостности данных, по умолчанию парсер будет выкидывать исключение если по заданному пути не была найдена нода. Для игнорирования таких ошибок следует использовать настройку `setIgnoreErrors(true)`

```
$config->setIgnoreErrors(true);
```

#### Базовый путь (setBasePath)

[](#базовый-путь-setbasepath)

По умолчанию парсер ожидает json с массивом в корневой ноде. Эту ноду можно изменить с помощью метода `setBasePath`. Данная настройка позволяет задать путь до данных, которые следует парсить.

```
$config->setBasePath('path.to.nodes');
```

Нода по указанному пути должна являться массивом.

### Дополнительно

[](#дополнительно)

#### Добавление json без лоадеров (setJson)

[](#добавление-json-без-лоадеров-setjson)

Возможно использование json прямую, без лоадеров. Для этого можно воспользоваться методом `setJson`

```
$parser->setJson('[{"name": "a", "text": "foo"}, {"name": "b", "text": "bar"}]');
```

При добавлении "сырого" json кода, он все равно превратится в массив, как и во всех предыдущих случаях, а также применится базовый путь (basePath), оригинальный(полный) json можно получить с помощью метода `getOriginalJson`. Этот метод также вернет массив

###  Health Score

25

—

LowBetter than 35% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2130d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/2756811?v=4)[Nastro](/maintainers/Nastro)[@Nastro](https://github.com/Nastro)

---

Top Contributors

[![Nastro](https://avatars.githubusercontent.com/u/2756811?v=4)](https://github.com/Nastro "Nastro (2 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ybushenko-json-parser/health.svg)

```
[![Health](https://phpackages.com/badges/ybushenko-json-parser/health.svg)](https://phpackages.com/packages/ybushenko-json-parser)
```

###  Alternatives

[aws/aws-sdk-php

AWS SDK for PHP - Use Amazon Web Services in your PHP project

6.3k543.5M2.6k](/packages/aws-aws-sdk-php)[neuron-core/neuron-ai

The PHP Agentic Framework.

2.0k656.1k38](/packages/neuron-core-neuron-ai)[craftcms/cms

Craft CMS

3.6k3.6M3.1k](/packages/craftcms-cms)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3741.3M47](/packages/tencentcloud-tencentcloud-sdk-php)[tempest/framework

The PHP framework that gets out of your way.

2.2k34.4k15](/packages/tempest-framework)[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

273.0k](/packages/eslazarev-wildberries-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
