Нужен класс для выборки, удаления и изменения JSON
нужен расширенный функционал библиотеки 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.
ждем предложений,
спасибо