Нужен класс для выборки, удаления и изменения JSON

Олег16 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
04.04.2013

нужен расширенный функционал библиотеки JsonPath

http://goessner.net/articles/JsonPath/

есть переменная в JSON формате произвольной структуры, размера и уровня вложенности.

есть строка запроса (фильтр, правило). в зависимости от функции, которой это правило передается, происходит выборка, удаление, вставка или изменение данных в JSON переменной.

строка запроса должна быть в формате, определяющем путь к объекту, индексу массива, набору индексов, фильтру по значению поля. разделитель глубины - символ "точка". правило для фильтрации дочерних элементов заключается в квадратные скобки.

например, есть следующие данные в переменной $json:

{ "store": {

"book": [

{ "category": "reference",

"author": "Nigel Rees",

"title": "Sayings of the Century",

"price": 8.95

},

{ "category": "fiction",

"author": "Evelyn Waugh",

"title": "Sword of Honour",

"price": 12.99

},

{ "category": "fiction",

"author": "Herman Melville",

"title": "Moby Dick",

"isbn": "0-553-21311-3",

"price": 8.99

},

{ "category": "fiction",

"author": "J. R. R. Tolkien",

"title": "The Lord of the Rings",

"isbn": "0-395-19395-8",

"price": 22.99

}

]

}

}

функция, возвращающая массив объектов всех книг:

filter($json, "store.book");

выбрать массив категорий всех книг:

filter($json, "store.book.category");

удалить из $json все категории:

delete(($json, "store.book.category");

вернуть массив имен авторов из первой и четвертой книги:

filter($json, "store.book.author[0,3]");

вернуть массив имен авторов c первой по третью книгу:

filter($json, "store.book.author[0-2]");

правило для индексов должно быть в формате:

[start-end:step ^exclude_start-exclude_end]

таким образом:

[0-10:2] - выбираем элементы с индексами 0,2,4,6,8,10 (шаг 2)

[0-10:2 ^4] - выбираем элементы с индексами 0,2,6,8,10 (исключаем 4)

[0-10 ^1-9] - выбираем элементы с индексами 0,10 (исключаем диапазон 1-9)

должна быть возможность фильтровать по значению поля.

например:

store.book[@price>10] оставит объекты book с ценой выше 10

онлайн тестирование указанной выше библиотеки JqueryPath:

http://jsonpath.curiousconcept.com/

правила фильтрации в ней немного отличаются от необходимых нам.

класс должен работать без использования базы данных, только PHP.

ждем предложений,

спасибо