@UserTrue
Когда искал по форуму, часто встречал ответы этого пользователя. Если найдется минутка, поделитесь опытом. Пока выделил два возможных решения замены curl http. Может есть еще варианты? Какой вариант для вас лучше?
Помогите с парсингом 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 любит ими пользоваться, я ресурсами больше.