Помогите разобраться с js и корявым модулем jsonpath



  • Установил модуль jsonpath, но не получается разобраться в синтаксисе.
    имеется ответ в виде джисона:

    {
    	"count": 19877,
    	"barcodes": [
    		{
    			"created": "2018-12-09 20:24:04",
    			"phone": "iphone7",
    			"accessToken": "пример1",
    			"link": "83dcd274f5f476f23379881e68545477"
    		},
    		{
    			"created": "2018-12-09 20:26:17",
    			"phone": "iphone7",
    			"accessToken": "пример2",
    			"link": "791228276b47cad415895ecca408f524"
    		},
    		{
    			"created": "2019-05-22 13:28:04",
    			"phone": "iphone7",
    			"accessToken": "пример3",
    			"link": "ecde8b395c7181be307cede64694d722"
    		}
    	]
    }
    

    Вытащил с помощью команды:

    $.barcodes[?(@.accessToken=="пример2")]
    

    Вот это получилось:

     [
        {
          accessToken: "пример2",
          created: "2018-12-09 20:26:17",
          link: "791228276b47cad415895ecca408f524",
          phone: "iphone7""
        }
      ],
    

    Все коды переданы с точностью один в один. В этом собственно и заключается моя проблема. На сайте http://jsonpath.com выводит все в правильном порядке, в ковычках, без лишних пробелов. Но в басе все как я скинул. Теперь я не могу спарсить значение phone ни средствами модуля, ни средствами жс (ведь кавычек тупа нет).

    Очевидно, что модуль не работает так как нужно.

    Что делать мне? Как сделать такой же запрос, но только не через jsonpath, а через js?



  • @kroda в действие выполнить код

    var json = JSON.parse([[NEW_VARIABLE]])
    for (var i = 0; i < json.barcodes.length; i++){
    if (json.barcodes[i].accessToken == "пример2"){
    [[LINK]] = json.barcodes[i].link
    [[PHONE]] = json.barcodes[i].phone
    }}
    

    Где в переменной [[NEW_VARIABLE]] находится ваш "ответ в виде джисона"
    На выходе в переменной [[LINK]] будет 791228276b47cad415895ecca408f524
    А в [[PHONE]] будет iphone7



  • @uraabk said in Помогите разобраться с js и корявым модулем jsonpath:

    А в [[PHONE]] будет iphone7

    Не знаю почему, но у меня крашится бас после этого кода.

    Думал сначала из-за 20к объектов, но потом проверил с одним все равно креш.



  • @kroda said in Помогите разобраться с js и корявым модулем jsonpath:

    @uraabk said in Помогите разобраться с js и корявым модулем jsonpath:

    А в [[PHONE]] будет iphone7

    Не знаю почему, но у меня крашится бас после этого кода.

    Думал сначала из-за 20к объектов, но потом проверил с одним все равно креш.

    Забавно, а у меня работает, с тем, что вы предоставили.
    Попробуйте создать новый xml и сделать в нем два действия первое установить переменную [[NEW_VARIABLE]] с этим json и второе выполнить код.



  • @uraabk said in Помогите разобраться с js и корявым модулем jsonpath:

    Забавно, а у меня работает, с тем, что вы предоставили.
    Попробуйте создать новый xml и сделать в нем два действия первое установить переменную [[NEW_VARIABLE]] с этим json и второе выполнить код.

    Все в порядке, это я допустил ошибку, из-за креша даже не сразу увидел.
    На 20 к объектов этот код крашит бас.

    А на 1 объекте результат что-то вроде:

    {
        accessToken: "пример",
        created: "2019-05-20 11:05:17",
      },
    

    Не суть, смысл в том, что тоже нет кавычек.

    Хорошо, тогда другой вопрос, есть ли способ выдрать велью из ключа линк, который я спарсил с помощью jpath?

    Мне всего-то нужно значение линк из:

     [
        {
          accessToken: "пример2",
          created: "2018-12-09 20:26:17",
          link: "791228276b47cad415895ecca408f524",
          phone: "iphone7""
        }
      ],
    


  • @kroda Сто раз прочитал, так и не понял, что у вас не так. Если вам нужно вытащить данные из готового объекта, а судя по тому что выводит JSONPath через модуль и сайт (сайт кстати почти тот же модуль использует), это есть готовый объект, с помощью модуля - делайте JSON.stringify([[ПЕРЕМЕННАЯ_С_ОБЪЕКТОМ]]) когда выбираете строку для парсинга в модуле, ну и соответственно тип expression.

    UPD. имейте в виду, что для такого объекта путь будет уже другой, т.е. $.phone, $.link и т.д



  • @oyasumi-punpun said in Помогите разобраться с js и корявым модулем jsonpath:

    stringify

    Заходим на сайт:http://jsonpath.com/

    вводим все из первого поста и получаем:

    [
      {
        "created": "2018-12-09 20:26:17",
        "phone": "iphone7",
        "accessToken": "пример2",
        "link": "791228276b47cad415895ecca408f524"
      }
    ]
    

    Заходим в бас и делаем все тоже самое, получаем:

     [
        {
          accessToken: "пример2",
          created: "2018-12-09 20:26:17",
          link: "791228276b47cad415895ecca408f524",
          phone: "iphone7""
        }
      ],
    

    Вы пишите :"Если вам нужно вытащить данные из готового объекта, а судя по тому что выводит JSONPath через модуль и сайт (сайт кстати почти тот же модуль использует), это есть готовый объект"

    Чтобы вот этот ответ баса был объектом:

     [
        {
          accessToken: "пример2",
          created: "2018-12-09 20:26:17",
          link: "791228276b47cad415895ecca408f524",
          phone: "iphone7""
        }
      ],
    

    Нужно чтобы ключи были заключены в ковычки. Моя проблема в том, что я не понимаю как мне вытащить ключ из этого набора символов. Ваш модуль при нажатии кнопки подходит ли строка под парс модуля выводит значение ФАЛС. Повторите пожалуйста тот момент который я не понял

    А именно, как мне использовать JSON.stringify([[ПЕРЕМЕННАЯ_С_ОБЪЕКТОМ]]) в модуле который не хочет работать с ответами такого типа



  • @kroda Прежде чем утверждать о том, что модуль неправильно работает, нужно было бы протестировать некоторые моменты.

    Ключи спокойно получаются без кавычек.

    Возьмите вашу JSON-строку, и установите переменную с помощью JSON.parse(переменная_со_строкой), и посмотрите как в инспекторе переменных выглядит ваш JSON. Ни у каких ключей в инспекторе никогда нет кавычек.

    Однако, если вы попробуете сделать вывод в лог JSON.stringify(объект_json), то увидите, что кавычки есть и это обычный валидный JSON. Какой ключ вам нужно вытащить? Например

    $.barcodes[?(@.accessToken=="пример2")].[*]
    

    Выдаст массив со списком ключей для данного объекта



  • @oyasumi-punpun said in Помогите разобраться с js и корявым модулем jsonpath:

    Ключи спокойно получаются без кавычек.

    Да, вы правы, я совсем забыл что в js нет ковычек, но это не помешало мне не спарсить даже методом через жс.

    У ключей джисона ковычки на месте, видимо я все это время думал об этом, говоря про другое, это моя вина.

    Насчет JSON.stringify, все получилось, ура. Вот я об этом и говорю с самого первого
    поста. Зачем работая с джисон массивом через синтаксис предназначенный только для джисона мне необходимо в случае поочередного парса возвращать жс обратно в джисон. Не проще было бы сделать для таких людей как я(ноль в программировании, тем более в жс) как на сайте, тоесть из джисона приходит ответ в виде джисона, а не в виде жс.

    Я хотел по конкретному значению токена найти кокретное значение линк.

    Если покажите как это сделать за 1 парс (а не как у меня сейчас через костыль обратного возвращения в джисон stringify) командой $.barcodes[?(@.accessToken=="пример2")] (что тут дальше написать?)

    Буду очень признателен!



  • @kroda said in Помогите разобраться с js и корявым модулем jsonpath:

    $.barcodes[?(@.accessToken=="пример2")]

    $.barcodes[?(@.accessToken=="пример2")].link
    

    Через экшен 'Получить значение' - получите на выходе значение 'link' у 'barcode' c токеном, равным 'пример2'.



  • @oyasumi-punpun said in Помогите разобраться с js и корявым модулем jsonpath:

    Через экшен 'Получить значение' - получите на выходе значение 'link' у 'barcode' c токеном, равным 'пример2'.

    Не успел изменить сообщение, уже успел сам понять

    Огромное спасибо!


Log in to reply