Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / json пара / 8 сообщений из 8, страница 1 из 1
27.12.2021, 21:48
    #40123463
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
json пара
Как узнать, что значение пары строка или число?
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[
		{
			"FieldName":"IntegerField",
			"FieldValueBeg":1,
			"FieldValueEnd":2
		},
		{
			"FieldName":"StringField",
			"FieldValueBeg":"3",
			"FieldValueEnd":"4"
		}
]


По первому узлу, 1 и 2, данные две строки дают истину
if xxx.JsonValue is TJSONNumber then ...
if xxx.JsonValue is TJSONString then ...

По второму - только if xxx.JsonValue is TJSONString = True...

Какбы хотолось ,чтобы то что без кавычек - это числою
Спасибо.
...
Рейтинг: 0 / 0
27.12.2021, 21:52
    #40123464
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
json пара
Вторая часть вопроса - как такую структуру запихать в record?
Код: pascal
1.
2.
3.
4.
5.
  TUslovie = record
    value: string;
    value_beg: string;
    value_end: string;
  end;


Но мне бы надо запихать туда еще и число (может быть и то, и то).


Финальный результат - построение where по массиву записей.
Если значение - строка - то where field between '1' and '2'
Если значение - число - то where field between 3 and 4

Большое спасибо
...
Рейтинг: 0 / 0
27.12.2021, 22:13
    #40123465
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
json пара
bzums
Вторая часть вопроса - как такую структуру запихать в record?
Код: pascal
1.
2.
3.
4.
5.
  TUslovie = record
    value: string;
    value_beg: string;
    value_end: string;
  end;



Но мне бы надо запихать туда еще и число (может быть и то, и то)

если там может случиться и целое число, и строка, то это кардинально плохой подход
...
Рейтинг: 0 / 0
27.12.2021, 23:14
    #40123472
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
json пара
Я знаю, что это плохой подход.
Использование чего будет в данном случае считаться хорогим подходом?

Все, что смог придумать - по конкретному полю смотреть тип в схеме данных и дергать сохраненные в тексте минимум и максимум как есть или конвертировать в число (если по структуре понятно, что это числовое поле).

Спасибо.
...
Рейтинг: 0 / 0
27.12.2021, 23:26
    #40123473
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
json пара
И еще один вопрос.
Будет ли Variant Parts in Records ыфходом из ситуации?
Синтаксис приблизительный.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Type
  TFieldType = (Stroka, Chislo);
  TFieldInfo = Record
    Type: TFieldType ;
    //
    begForChislo:integer;
    endForChislo:integer;  
    //
    begForStroka:string;
    endForStroka:string;
  End;



Большое спасибо
...
Рейтинг: 0 / 0
27.12.2021, 23:59
    #40123477
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
json пара
bzums
И еще один вопрос.
Будет ли Variant Parts in Records ыфходом из ситуации?
Синтаксис приблизительный.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Type
  TFieldType = (Stroka, Chislo);
  TFieldInfo = Record
    Type: TFieldType ;
    //
    begForChislo:integer;
    endForChislo:integer;  
    //
    begForStroka:string;
    endForStroka:string;
  End;




Большое спасибо

Не будет. Большое пожалусто.
...
Рейтинг: 0 / 0
28.12.2021, 08:40
    #40123513
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
json пара
Хорошо, а такой вот вариант:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
type
  TMyRecord = record
  strict private
    FIsNumeric: Boolean;
    FInt: Integer;
    FStr: string;
    //getters and setters
  public
    property IsNumeric: Boolean read FIsNumeric write FIsNumeric;
    property Int: Integer read GetInt write SetInt;
    property Str: string read GetString write SetString;
  end;
...
function TMyRecord.GetInt: Integer;
begin
  if IsNumeric then
    Result := FInt
  else
    raise EValueNotAvailable.Create('no no');
end;

function TMyRecord.GetString: String;
begin
  if not IsNumeric then
    Result := FString
  else
    raise EValueNotAvailable.Create('no no');
end;
...
Рейтинг: 0 / 0
28.12.2021, 11:20
    #40123555
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
json пара
bzums
Хорошо, а такой вот вариант:

Это сработает, но для подобных целей уже сто лет как придуман Variant
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / json пара / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]