Я рекомендую голову не ломать этим.
Воспользуйтесь онлайн генератором https://easycodeforall.com/generate-jsonpath.html он вам выдаст все ключи.
Со временем попользуетесь и поймете как это работает. Лично я так и изучил работу JsonPath
Помогите с парсингом JSON
-
Что то нифига не получается...
Есть ответ сервера{ "status": "success", "user_actions": [], "data": { "balance": 865, "response": [ { "id": 77, "not_available": false, "cost": 2100, "enough_balance": false, "count_left": 1, "image": "e.jpg", "example_male": null, "example_female": null, "name": "Фа", "tag": "e", "description": "<p>Ф/p>", "congrats_text": "<p>Поздравляем</p>", "published": true, "is_special": false, "is_promoted": false, "is_enabled": true, "is_shown_in_account": true, "is_sale": false }, { "id": 78, "not_available": false, "cost": 2400, "enough_balance": false, "count_left": 1, "image": "https:/r.jpg", "example_male": null, "example_female": null, "name": "Тр", "tag": "r", "description": "<p>Тр</p>", "congrats_text": "<p>Поа.</p>", "published": true, "is_special": false, "is_promoted": false, "is_enabled": true, "is_shown_in_account": true, "is_sale": false }, { "id": 45, "not_available": true, "cost": 2500, "enough_balance": false, "count_left": 0, "image": "https:/.png", "example_male": "https:png", "example_female": "https:/", "name": " рублей", "tag": "Lur", "description": "<p>5000</p>", "congrats_text": "<p><span style=\"color:rgb(34, 34, 34); font-family:arial,sans-serif\">Вы суток.</span></p>", "published": true, "is_special": false, "is_promoted": false, "is_enabled": true, "is_shown_in_account": false, "is_sale": false } ] } }Надо вывести в лог ID|count_left|is_specialname
при этом выводить если count_left !=0 Ну и еще добавить условие (т.е. 2 ответа вывести) is_specia== тру
Попытка сконструировать фильтр на https://jsoneditoronline.org/ не получилась :(
такой запрос data.response[?data.response.count_left!=0].name
выдает все что есть. -
@verhov вы одним массивом запросом хотите все сразу? Так не бывает если я правильно понимаю ваш вопрос) И count_left и name это один массив и родитель у них response. И ни первый ни второй непапанемама ни первому ни второму. да и json у вас интересный..


JSON не xml он так не умеет. Выводите в массив потом проверяйте или сразу проверяйте по списку. Вы хотите и сразу если не 0 json отпадает. вернее он не умеет если, он умеет по ключу, а что там.. ему пофиг. И еще проверку если что там тру. Выполнить код и вперед это разные действия, но их можно упаковать. в коде. Первое массив получает, второе проверяет и выводит если надо.
p/s
json может из массива выдернуть по ключу один элемент это может. например третий или второй. Но он не может проверить что в нем находиться. -
@allive Вот примерно так же распасить ваши элементы
https://community.bablosoft.com/topic/5833/как-парсить-json-массив/3А вот все проверки это уже совсем не json
;-)
Для вас нашел(пользуйтесь пожалуйста поиском по форуму)booldozer -
@verhov said in Помогите с парсингом JSON:
Что то нифига не получается...
Есть ответ сервера{ "status": "success", "user_actions": [], "data": { "balance": 865, "response": [ { "id": 77, "not_available": false, "cost": 2100, "enough_balance": false, "count_left": 1, "image": "e.jpg", "example_male": null, "example_female": null, "name": "Фа", "tag": "e", "description": "<p>Ф/p>", "congrats_text": "<p>Поздравляем</p>", "published": true, "is_special": false, "is_promoted": false, "is_enabled": true, "is_shown_in_account": true, "is_sale": false }, { "id": 78, "not_available": false, "cost": 2400, "enough_balance": false, "count_left": 1, "image": "https:/r.jpg", "example_male": null, "example_female": null, "name": "Тр", "tag": "r", "description": "<p>Тр</p>", "congrats_text": "<p>Поа.</p>", "published": true, "is_special": false, "is_promoted": false, "is_enabled": true, "is_shown_in_account": true, "is_sale": false }, { "id": 45, "not_available": true, "cost": 2500, "enough_balance": false, "count_left": 0, "image": "https:/.png", "example_male": "https:png", "example_female": "https:/", "name": " рублей", "tag": "Lur", "description": "<p>5000</p>", "congrats_text": "<p><span style=\"color:rgb(34, 34, 34); font-family:arial,sans-serif\">Вы суток.</span></p>", "published": true, "is_special": false, "is_promoted": false, "is_enabled": true, "is_shown_in_account": false, "is_sale": false } ] } }Надо вывести в лог ID|count_left|is_specialname
при этом выводить если count_left !=0 Ну и еще добавить условие (т.е. 2 ответа вывести) is_specia== тру
Попытка сконструировать фильтр на https://jsoneditoronline.org/ не получилась :(
такой запрос data.response[?data.response.count_left!=0].name
выдает все что есть.Не нужно усложнять. Сначала проверьте is_special. Если true, то выводите то, что нужно в лог.
-
@allive said in Помогите с парсингом JSON:
вы одним массивом запросом хотите все сразу?
хотелось бы вывести 2 строчки (в данном примере)
ИД наме
ИД наме@allive said in Помогите с парсингом JSON:
Вы хотите и сразу если не 0 json отпадает. вернее он не умеет если, он умеет по ключу, а что там.. ему пофиг. И еще проверку если что там тру.
собственно выводить, если не совпадает.
как я понял, надо все отобрать, запихнуть в список и потом перебирать в цикле? Как то не очень красиво :) -
@verhov said in Помогите с парсингом JSON:
Надо вывести в лог ID|count_left|is_specialname
при этом выводить если count_left !=0 Ну и еще добавить условие (т.е. 2 ответа вывести) is_specia== труvar arr = JSON.parse(http_client_encoded_content("auto")).data.response var arr_result = [] for(var i = 0;i < arr.length; i++){ if(arr[i].is_special && arr[i].count_left != 0){ arr_result.push(arr[i].id + "|" + arr[i].count_left + "|" + arr[i].is_special + "|" + arr[i].name) }} log(arr_result) -
-
@verhov Ну да он вам массивом и отдает, в логе оно и выглядит как одна строка. Да и log() надо в цикле ну кмк для красоты)) что бы лог сразу был с номером элемента который и будет номером цикла
з/ыыы но это цикл в цикле)) рекурсия как она есть с этим надо осторожнее. -
@verhov Можно но я счас не в басе и нету его(( вы знаете почему бгг. А я не боюсь обмануть на свою склеротическую деменцию я не расчитываю. Лайвхак 90% действий есть в конструкторе. Так вот если что то хотите посмотреть в нем создаете, а потом смотрите в скрипте действие по id и вуаля.
Кстати, вы все это можете попробовать сами составить, выглядеть будет страшно)) Но если разобрать... Он не создает функций, а просто лепит все скобками -
@verhov Ну в общем обычную переменную есть 2 путя,
1)
VAR_ЧТО_ТО
2)
[[ЧТО_ТО]]
И то и то это переменная для баса равнозначная. Но капсить обязательно. Иначе он ее создаст, а вот вы ее не увидите. В списке переменных. Поэтому и рекомендуется писать переменные или так или так не миксовать их иначе с выполнить код могут быть проблемы.
Глобальную не помню(( По форуму посмотрите @Fox любит ими пользоваться, я ресурсами больше.