1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Ошибка api и числовые типы

Тема в разделе "Отклоненные задачи", создана пользователем ulan, 5 май 2020.

  1. ulan

    ulan A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    25 июл 2013
    Сообщения:
    50
    Симпатии:
    6
    У меня клиент на c# (строго с типами данных в отличие от пхп, питона и т.д.) и он падает при парсинге json ответа апи, когда неожиданно ожидаемые числовые значения приходят как строка "none".

    Image 4.png

    также замечено на "uniqueResultsCount"

    Пусть он пишет вместо "none" -1 или 0 (что логически то же самое)
     
  2. ulan

    ulan A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    25 июл 2013
    Сообщения:
    50
    Симпатии:
    6
    Туда же все ответы вида "число". Например getTasksList выдает список чисел, но как строки.
     
  3. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.336
    Симпатии:
    1.791
    проверяйте возвращаемые типы, текущая версия API устоявшаяся и в ближайшее время изменений(кроме дополнений) не планируется
     
  4. ulan

    ulan A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    25 июл 2013
    Сообщения:
    50
    Симпатии:
    6
    Это в динамических языках есть что-то вроде json_decode/json.loads, которые распарсят любой json в соотвествующий ему массив и потом уже можно будет разбираться что он там напарсил.
    В языках со статической типизацией такое не проходит - парсер разбирает в json в нужную структуру (и падает на этом). Ну или добро пожаловать в "ручками разбирай"

    Каких изменений api?????
    Я прошу слать там где ожидаются числовые значения...числовые значения.
    Собственно, там и так шлются числовые значения. Просто как строки (на что динамическим языкам плевать) или иногда не числа (как по мне это баг).

    Разве что у вас
    uniqueResultsCount: 0
    логически отличается от
    uniqueResultsCount: 'none'

    А не просто забытая проверка и просачивание 'none' в вывод вместо логичного 0.

    Ни один клиент из существующих не пострадает от того, что там где он ожидал число и делал дополнительные проверки на "а вдруг не число" будет приходить число и все эти проверки станут ненужными.
     
  5. Reset

    Reset A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 фев 2019
    Сообщения:
    18
    Симпатии:
    15
    Обратите внимание на http://jsonapi.org - все числовые атрибуты берутся в кавычки.
     
  6. ulan

    ulan A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    25 июл 2013
    Сообщения:
    50
    Симпатии:
    6
    Не "все числовые аттрибуты", а только id, который по своей природе не обязательно должен быть числом и поэтому jsonapi, как общий стандарт, это предусматривает.
     
    #6 ulan, 6 май 2020
    Последнее редактирование: 6 май 2020
  7. ulan

    ulan A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    25 июл 2013
    Сообщения:
    50
    Симпатии:
    6
    Вот https://a-parser.com/wiki/user-api/#gettaskstate
    Все намешано

    runTime: 137, <-- число
    uniqueResultsCount: 'none', <-- строка и не число
    requests: '54', <-- строковое число

    при этом

    requests: 0 <-- число

    То есть значение может быть число/строка-число/не число
    php и ко это фиолетово, а вот в строгих языках это приводит к ошибке разбора.

    Как по мне, там должны быть все числа (стандарт json). Но даже если "числа в кавычках", то всегда числа в кавычках, а "не число" там вообще не должно быть - 'none' чем не 0?! и почему бы не писать законный 0 вместо него?!
     
  8. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.336
    Симпатии:
    1.791
    потому что 'none' в данном контексте означает что уникализация не включена
    в .Net есть множество способов работать с динамичным JSON https://stackoverflow.com/questions...son-object-into-dynamic-object-using-json-net

    поэтому данное утверждение - ложь
     
    relay нравится это.
  9. ulan

    ulan A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    25 июл 2013
    Сообщения:
    50
    Симпатии:
    6
    Ну да. Это если вы еще ничего не написали и собираетесь выбрать json.net. А если уже написали и выбран другой сериализатор...

    Вы бы были более внимательнее к тому, какие слова вы ложью называете.

    Тему можно закрывать. Причины, по которым ничего не изменится, мне ясны.
     

Поделиться этой страницей