Я рекомендую голову не ломать этим.
Воспользуйтесь онлайн генератором https://easycodeforall.com/generate-jsonpath.html он вам выдаст все ключи.
Со временем попользуетесь и поймете как это работает. Лично я так и изучил работу JsonPath
Содержит ли Json конструкция
-
Всем добрый вечер, подскажите пожалуйста, сам не спец по JSon, как в данной конструкции будет логично проверять не точное вхождение, а содержит ли?
$.items[?(@.title=="[[TITLE]]")].idМне требуется title проверить на содержание части [[TITLE]], а не на точное вхождение (чтобы получить id). В идеале конечно именно через модуль, а не JS.
Пример аналогии в if.indexOf("te") >=Попробовал с
=~ и примерами в формате =~ /.*Tolkien/Но пока еще не разобрался до конца :))
Всем заранее большое спасибо.
Несколько раз пытался найти документацию полную по модулю, но, к сожалению, товарищ страницу поменял (страницу нашел), а доки куда-то перепрятал )) Так и не нашел, если подскажите где - буду очень благодарен.
-
Товарищ доки никуда не прятал, просто переместил в другой репозиторий. В документации действий модуля указана актуальная на данный момент ссылка:
https://cheshirecaat.github.io/bas-docs/json-path/json-path-ru.htmlПо вашему вопросу. Пусть есть такой JSON:
{ "items": [ { "title": "aTEST", "id": 2 }, { "title": "bTEST", "id": 3 } ] }Следующий путь сделает то, что вам нужно:
$.items[?(@.title.indexOf("a") >= 0)].idПроверял здесь:
https://jsonpath.com/В модуле тоже работает.
=~ и примерами в формате =~ /.*Tolkien/Такой синтаксис не поддерживается
-
Спасибо Вам большое, куда денежек подкинуть немного? ) (увидел))
Сейчас потестирую. Честно - искать пытался несколько раз, но в Вашем личном репе с модулем - не смог найти (Точное вхождение - ищет, добавляю что-то лишнее, уже, к сожалению - нет. У меня проблема обратного характера, у меня лишнее не в title, а в [[TITLE]].
Убрать не могу, оно всегда рандомное. Но есть вставка, которая содержится в title.
Мне по сути нужен MATCH по title из [[TITLE]].
Извиняюсь за сумбур.
-
Вообще, в теории
$.items[?(@.title.indexOf("oreshki Belka") >= 0)].idДолжен отработать в
{ "items": [ { "title": "Belka", "id": 2 }, { "title": "bTEST", "id": 3 } ] }Но почему-то не срабатывает. Или даже в теории не должен?
Или я уже совсем туплю? (
Заранее извиняюсь, вторые сутки пишу, поспалось не очень. -
@lcatlas В подписи ссылку добавил))
По поводу доки - на данный момент в модуле подробнее всего описано, на сайте пока мало инфы, но планы добавить больше есть. Поэтому в первую очередь смотрите информацию в описание к действиям. В принципе можете подглядывать в разные реализации на разных языках - только придерживайтесь правила, если есть доп.синтаксис - он скорее всего не будет работать. В модуле классическая реализация самих запросов по сути (немного модифицированная мной).
Сразу отвечу на последнюю запись - в теории не должен)
indexOf ищет вхождение подстроки в той строке, у которой вы этот метод вызываете. Вообще если я правильно вас понял, вам нужен фильтр по определенному паттерну вроде Regex? -
Лучше так - покажите пример вашего TITLE и пример вроде моего сделайте и скажите, что должно быть на выходе. Так быстрее разберемся.
-
Если коротко, у меня есть список донейтов, с донейтами приходит левая информация и название песни.
Мне нужно получить ID песни, отбросив лишнюю информацию, она всегда разная и на разных языках.
Сейчас распишу в посте примеры всего. Спасибо большое.
Пример TITLE
$.items[?(@.title.indexOf("Sun Will Rise Again - Madonna my own привет всем") >= 0)].idПример кода (в приходящих JSON очень много мусора лишнего, создаст путаницу, изначальная конструкция полностью рабочая - в первом примере)
{ "items": [ { "title": "Sun Will Rise Again - Madonna", "id": 2 }, { "title": "bTEST", "id": 3 } ] }Вот это отработает у меня (но только в том случае, если будет точное название песни, без лишнего мусора, люди должны прислать только песню и так, как указано)
$.items[?(@.title=="[[TITLE]]")].id -
Если я вас правильно понял, то можно так - JSON.xml