Добавить тип данных при просмотре результата парсинга Json в окне переменных

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Постоянно сталкиваюсь с тем что некоотрые распаршенные из Json данные оказываются типом long, а не int как предполагается ..

Я обычно смотрю на результат парсинга и сразу в коде пишу что-то типа

int city_id = 0;
try { city_id = project.Json.response.city_id; } catch{}

а в результате оказывается что project.Json.response.city_id имеет тип long, а не int ... из-за try {} catch {} ошибка никакая не выводится и потом долго приходится искать в чем же причина глюклов и неправильной работы

а если бы отображался тип, то и проблем бы таких не возникало
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Так приводи значения сразу к типу long и не парься
C#:
long city_id = 0L;
try { city_id = long.Parse(project.Json.response.city_id.ToString()); } catch{}
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
это понятно что можно конвертацию делать, но это лишние и соверешенно ненужные конструкции ж) если я сразу буду знать какой там тип, то сэкономлю много байт кода ;-)))
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Это ж сначала результат в строку будет конвертироваться, потом строка в long ... в общем как и написал выше - дополнительные ненужные действия
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
а как вообще выведется ошибка в тру кэйтч твоём если ты даже его никуда не вывел ??
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
а как вообще выведется ошибка в тру кэйтч твоём если ты даже его никуда не вывел ??
она не выведется конечно же, просто без трай катч шаб вылетет по ошибке
ProjectMaker_2018-03-23_11-54-04.png

но я привык сразу оборачивать в трафй катч при написании ... поэтому шаб у меня не вылетает при разности типов
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
она не выведется конечно же, просто без трай катч шаб вылетет по ошибке
Посмотреть вложение 28536
не может он по ошибке вылететь, если ты задашь выйти по ошибке он конечно выйдет, а установи только вывод в лог, он тебе выдаст ошибку и выйдет по зелёной
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
если я пишу без трай катч

int city_id = 0;
city_id = project.Json.response.city_id;

и project.Json.response.city_id оказывается типа long, то происходит то что я выше на скриншоте выложил

но я всегда сразу оборачиваю в трай катч и в результате получаю в случае несовпадения типов city_id = 0 ... вот о чем я толкую
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
если я пишу без трай катч

int city_id = 0;
city_id = project.Json.response.city_id;

и project.Json.response.city_id оказывается типа long, то происходит то что я выше на скриншоте выложил

но я всегда сразу оборачиваю в трай катч и в результате получаю в случае несовпадения типов city_id = 0 ... вот о чем я толкую
ну так тебе дали ответ как поступить, ты ведь сам забираешь в int, если ты знаешь что там long для чего в int берёшь ?
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
ну так тебе дали ответ как поступить, ты ведь сам забираешь в int, если ты знаешь что там long для чего в int берёшь ?
дак в том то и дело что я глядя в окно переменных (вкладка json) не знаю лонг там или инт
например заглянул я в это окно и вижу такую строку
ProjectMaker_2018-03-23_12-05-32.png
я не знаю лонг это или инт
но по дефолту подразумеваю что int ... а потом оказывается что long ;-)
я и предлагаю добавить в это окно тип для большей наглядности
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
  • Спасибо
Реакции: Yuriy Zymlex

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
ну твоими строками кода я могу так сказать, если там будет пустота то выйдет ошибка, какой тогда тип задавать ?
тут надо конкретно знать что в переменной есть значение
это регекс не выдаст исключение
а json минус то что если берёшь так +100500 строк и на 50-й пустота то шаб выйдет по ошибке
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Так подозревай сразу, что это long, в чём проблема? Какие байты ты собрался сэкономить?
В большинстве случаев это оказывается именно int ... и только один-два каких-нибудь параметра оказываются лонгами .. узнаю об этом по неправильному результату парсинга. Считать их по дефолту лонгами это значит делать дополнительные конвертации в строку и потом в лонг ... мне так не очень хочется.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
ну твоими строками кода я могу так сказать, если там будет пустота то выйдет ошибка, какой тогда тип задавать ?
тут надо конкретно знать что в переменной есть значение
это регекс не выдаст исключение
а json минус то что если берёшь так +100500 строк и на 50-й пустота то шаб выйдет по ошибке
в моем примере city_id просто будет иметь значение 0 и ничего никуда не вывалиться по ошибке

int city_id = 0;
try { city_id = project.Json.response.city_id; } catch{}

если project.Json.response.city_id не будет вообще существовать или там каким-то образом пустата возникнет, то city_id просто так и останется 0, что в логике моего шаблона и должно быть
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
ну как я понял ты не использовал тру кэйтч
поэтому ты вывалился бы по ошибке при пустой переменой
хоть пусть у тебя там какое значение задано было бы
а если коль ты уже выставил тру кэтч, так хоть выведи в нём в лог сообщение чтобы видеть исключение
а пустые скобки тебе ничего не дадут
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
ну как я понял ты не использовал тру кэйтч
поэтому ты вывалился бы по ошибке при пустой переменой
хоть пусть у тебя там какое значение задано было бы
а если коль ты уже выставил тру кэтч, так хоть выведи в нём в лог сообщение чтобы видеть исключение
а пустые скобки тебе ничего не дадут
тут вот какое дело .. почему я не вывожу в лог в catch, а оставляю пустые скобки
я в try catch я оборачиваю с единственной целью - исключить вылет шаблона когда нужного элемента не существует
то есть у меня цикл по результатам парсинга json, в нем на каждой интерации я проверяю сотни разных переменные и у каких-то элементов существует условный city_id , а у каких-то нет ... там где не существует, у меня получается 0, там где существует то берется соответствующее значение ... и я не хочу что-то выводить в лог каждый раз когда условный city_id не существует т.к это не ошибка в общем-то,а просто юзер не указал свой город
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
651
Баллы
93
г
в моем примере city_id просто будет иметь значение 0 и ничего никуда не вывалиться по ошибке

int city_id = 0;
try { city_id = project.Json.response.city_id; } catch{}

если project.Json.response.city_id не будет вообще существовать или там каким-то образом пустата возникнет, то city_id просто так и останется 0, что в логике моего шаблона и должно быть
Дык если парсеру придет json в котором значения не будут выходить за Int32.MaxValue, то они будут обработаны как int, а если будут то обработаются как long.
И тут только вы можете знать какое максимальное значение может быть.

Считать их по дефолту лонгами это значит делать дополнительные конвертации в строку и потом в лонг ... мне так не очень хочется.
Вот тут не понял, откуда возьмутся дополнительные конвертации ? int к long имеет неявное преобразование, поэтому если вы обозначите переменную как long, и будете ей присваивать значение int, то вы просто ничего не заметите.
 
  • Спасибо
Реакции: Dimionix

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
в зенке хотя бы так делай, выводи для себя когда пишишь шаб, так как отдебажить трудно, потом когда всё наладишь все эти тру катчи можешь закоментить
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
в зенке хотя бы так делай, выводи для себя когда пишишь шаб, так как отдебажить трудно, потом когда всё наладишь все эти тру катчи можешь закоментить
периодически так и делаю, но если бы заранее при написании кода (а его я пишу глядя в окно с распарсенными данными json) я знал бы тип, то можно было бы не писать лишнего и потом ничего не комментировать =)
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Вот тут не понял, откуда возьмутся дополнительные конвертации ? int к long имеет неявное преобразование, поэтому если вы обозначите переменную как long, и будете ей присваивать значение int, то вы просто ничего не заметите.
я говорил именно про конструкицию предложенную Dimionix во втором посте этой темы. Там сначала идет коныертация в строку, потом в long
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
я говорил именно про конструкицию предложенную Dimionix во втором посте этой темы. Там сначала идет коныертация в строку, потом в long
Откуда мне знать, какой тип данных отдаёт project.Json.response.city_id, поэтому чтоб наверняка, сделал конвертацию.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Откуда мне знать, какой тип данных отдаёт project.Json.response.city_id, поэтому чтоб наверняка, сделал конвертацию.
и тут мы вновь приходим к тому что я и предлагаю - ввести в окно просмотра переменных json тип данных, что бы сразу его знать ... а то там там в city_id могут быть числа, но по факту тип переменной будет string ... я ж это и предлагаю, просто сделать еще один столбец с типом данных ж)
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
651
Баллы
93
и тут мы вновь приходим к тому что я и предлагаю - ввести в окно просмотра переменных json тип данных, что бы сразу его знать ... а то там там в city_id могут быть числа, но по факту тип переменной будет string ... я ж это и предлагаю, просто сделать еще один столбец с типом данных ж)
Т.к. в json на выходе объект с типом Dynamic, то у тебя на выходе будет часть значений инт, а часть лонг, и какой шанс что ты увидишь этот лонг среди кучи интов ?
Приходит то все в стрококовом типе.
Это первое, ну и второе, вы потом все наверняка кладете значения в таблицу или в project.Variable, а у них тип STRING, так конвертируйте сразу в стринг и не парьтесь.
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
651
Баллы
93
я говорил именно про конструкицию предложенную Dimionix во втором посте этой темы. Там сначала идет коныертация в строку, потом в long
Вот без всяких доп конвертаций:
C#:
long city_id = 0;
try { city_id = project.Json.response.city_id; } catch{}
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Вот без всяких доп конвертаций:
ну эт понятно, просто как уже писал есть привычка (видимо вредная) видеть число и писать по дефолту int =) видимо придется как-то убить в себе эту привычку и писать long ж)
а сразу в строки мне не подходит т.к нужно сравнивать числа с заданными
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
возьми цикл простой и задай ему 9999999999999999999 тебе выдаст ошибку, тоже int вроде
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)