Содержит ли 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



  • Супер, спасибо большое!


Log in to reply