Помогите с парсингом 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
    выдает все что есть.


  • Banned

    @verhov вы одним массивом запросом хотите все сразу? Так не бывает если я правильно понимаю ваш вопрос) И count_left и name это один массив и родитель у них response. И ни первый ни второй непапанемама ни первому ни второму. да и json у вас интересный..
    alt text
    alt text
    JSON не xml он так не умеет. Выводите в массив потом проверяйте или сразу проверяйте по списку. Вы хотите и сразу если не 0 json отпадает. вернее он не умеет если, он умеет по ключу, а что там.. ему пофиг. И еще проверку если что там тру. Выполнить код и вперед это разные действия, но их можно упаковать. в коде. Первое массив получает, второе проверяет и выводит если надо.
    p/s
    json может из массива выдернуть по ключу один элемент это может. например третий или второй. Но он не может проверить что в нем находиться.


  • Banned

    @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)
    


  • @fox

    сейчас отработает БАС попробую, спасибо...
    если специал нужен false?



  • @verhov said in Помогите с парсингом JSON:

    если специал нужен false?

    Значит меняете условие if



  • @fox said in Помогите с парсингом JSON:

    Значит меняете условие if

    я понял :) но что то с просони не понял как брать НЕ arr[i].is_special



  • Спасибо, работает :) только для красоты хотелось бы еще переводить строку после каждой строки массива, пробовал приклеивать '\n', не помогает.


  • Banned

    @verhov Тогда надо получать количество элементов в массиве, и выводить их по очереди. ну кол-во это что бы цикл знал сколько раз.
    Или вы хотите в ответ разделенный получать?



  • опять фор и лог с [i]?


  • Banned

    @verhov Ну да он вам массивом и отдает, в логе оно и выглядит как одна строка. Да и log() надо в цикле ну кмк для красоты)) что бы лог сразу был с номером элемента который и будет номером цикла
    з/ыыы но это цикл в цикле)) рекурсия как она есть с этим надо осторожнее.


  • Banned

    @allive Тогда проще будет не объединять а выводить по отдельности. Ато мартышкин труд сначала собрали потом порвали.



  • или сразу в условие вставить вывод в лог :) собственно работает, хоть и не красиво...

    И еще тогда вопрос, как сделать приняте условие, если переменная ложна?


  • Banned

    @verhov !(if)



  • И еще докучи вопрос (что бы потом не задавать) в коде можно присвоить значения переменной/глобальной переменной?


  • Banned

    @verhov Можно но я счас не в басе и нету его(( вы знаете почему бгг. А я не боюсь обмануть на свою склеротическую деменцию я не расчитываю. Лайвхак 90% действий есть в конструкторе. Так вот если что то хотите посмотреть в нем создаете, а потом смотрите в скрипте действие по id и вуаля.
    Кстати, вы все это можете попробовать сами составить, выглядеть будет страшно)) Но если разобрать... Он не создает функций, а просто лепит все скобками



  • ок, это на потом, наведение красоты и автоматицации, тут хотя бы так сегодня протестировать и получить результат. :)


  • Banned

    @verhov Ну в общем обычную переменную есть 2 путя,
    1)
    VAR_ЧТО_ТО
    2)
    [[ЧТО_ТО]]
    И то и то это переменная для баса равнозначная. Но капсить обязательно. Иначе он ее создаст, а вот вы ее не увидите. В списке переменных. Поэтому и рекомендуется писать переменные или так или так не миксовать их иначе с выполнить код могут быть проблемы.
    Глобальную не помню(( По форуму посмотрите @Fox любит ими пользоваться, я ресурсами больше.


Log in to reply
 

  • 1
  • 3
  • 2
  • 5
  • 4
  • 4
  • 2
  • 2