powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Массив olevariant в json
25 сообщений из 26, страница 1 из 2
Массив olevariant в json
    #39698279
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не тривиальная задача необходимо
Массив olevariant(елементы массива то же варианты тип ни где не задан явно)
в масиве может быть что угодно в пределах разумного(датасетпровайдер,массив вариантов просто массив и тд)

сконвертировать в json

проблема с которой столкнулся
как понять какого типа элемент массива пробую через VarType (но выдаёт какую то белеберду)

разработка delphi 6.

Может кто то с таким сталкивался или делал что то подобное.


------------------------------------
Не воспринимайте доброту за слабость
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698291
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry_PV,

1. Я бы создал объектную модель уже со всеми типами элементов, которые только могут быть в OLEVariant
2. Эту объектную модель заполнял бы из OLEVariant
3. Сериализовывал объектную модель в Json
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698295
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это проблема. Стоит рассмотреть другие варианты обмена информацией. Например, сразу хранить данные в json, использовать обычные массивы или взять универсальные контейнеры (из делфи или сторонние).
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698512
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698561
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry_PVпробую через VarType (но выдаёт какую то белеберду)Что именно возвращается?
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698588
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry_PV,

Dmitry_PVкак понять какого типа элемент массива пробую через VarType (но выдаёт какую то белеберду)

посмотрите может эти функции сработают:
SafeArrayGetVarType

SafeArrayGetElement
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698607
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так сериализации добился.
Остался вопрос изменить кодировку для delphi 6 есть примеры какие-нибудь?
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698608
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
меняем на UTF8
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698636
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry_PV,

разобрался сам спс.
теперь обратный процесс
десериализация полученного json обратно в olevariant.
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698654
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правила хорошего тона требует теперь рассказать, в чем бяла проблема и как решил. Форум - это немного howto
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698655
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опечатка, "была"
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698660
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

проблема была в том что используя VarType не много не так.
а надо было

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure varAsstr(var rezu : OleVariant;var JsonList:Tstringlist);
var
 v:Variant;
begin
for i:=VarArrayLowBound(rezu,1) to VarArrayHighBound(rezu,1)   do
begin
 v:=rezu[i];
    str:='';

    case VarType(v) of
    varEmpty:   begin  str_type:='varEmpty'; str:=''; end;
    varNull:    begin  str_type:='varNull'; str := '<NULL>';                end;
    varSmallInt:begin  str_type:='varSmallInt'; str := IntToStr(V);             end;
    varInteger: begin  str_type:='varInteger'; str := IntToStr(V);             end;
    varSingle:  begin  str_type:='varSingle'; str := FloatToStr(V);           end;
    varDouble:  begin  str_type:='varDouble'; str := FloatToStr(V);           end;
    varCurrency:begin  str_type:='varCurrency'; str := CurrToStr(V);            end;
    varDate:    begin  str_type:='varDate'; str := DateTimeToStr(V);        end;



ну а дальше собираем стринглист по всем правилам формирования json.
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698671
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry_PVа надо былоУчитывая, что вы все равно используете системные форматы и разделители, что мешало сделать так?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
v:=rezu[i];
v_type = VarType(v);
str_type = VarTypeAsText(v_type);
if v_type = varNull then
  str := '<NULL>'
else
  str := v;
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698675
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

это типо замена case?
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698676
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Код: pascal
1.
2.
3.
 varVariant: begin  str_type:='varVariant'; str := '<Variant>';             end;
    varDispatch:begin  str_type:='varDispatch'; str := '<varDispatch>';         end;
    varUnknown: begin  str_type:='varUnknown'; str := '<varUnknown>';          end;



а вот это как впихнуть сюда тогда?
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698679
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry_PVа вот это как впихнуть сюда тогда?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
v:=rezu[i];
v_type = VarType(v);
str_type = VarTypeAsText(v_type);
case v_type of
  varNull: str := '<NULL>';
  varVariant: str := '<Variant>';
  varDispatch: str := '<varDispatch>';
  varUnknown: str := '<varUnknown>';
else
  str := v;
end;
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698683
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

согласен.
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698921
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FloatToStr даст тебе веселые ощущения и нарушение формата на системе с десятичным разделителем "," (и не только)
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39698976
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

нормально все переводит с "," остаются
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39699072
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry_PVВасилий 2,

нормально все переводит с "," остаются
Вот именно. А теперь скорми получившийся json ему и полюбуйся на результат
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39699083
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.09.2018 14:30, Василий 2 пишет:
> А теперь скорми получившийся json ему https://codebeautify.org/jsonvalidator и полюбуйся на результат

они там кофе просят.
слёзно.
ты купил им?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39699224
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

ругается но проблема в том что не понятно на что.
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39699226
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.09.2018 19:07, Dmitry_PV пишет:
> ругается но проблема в том что не понятно на что.

сеня, забей (С)
если ты сторишь объект им.ЖОЙСОНа как строку, то пофиг.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39699240
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry_PVВасилий 2,

ругается но проблема в том что не понятно на что.
Ругается он на твою запятую. Потому как json - это формат, на который есть установленный стандарт. И в стандарте этом десятичный разделитель - точка. А в твоем варианте результат зависит от настроек системы: вот поставит юзер, чтобы у него дробная часть отделялась буквой Ы - и привет. На другой системе ты файл не прочитаешь
...
Рейтинг: 0 / 0
Массив olevariant в json
    #39699313
Dmitry_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

Интересная теория.И даже это было бы именно так если бы это была др система, но нет это будет та же система и сериализатор будет написан там же , а по сему я думаю что могу не обращять внимание на запятую.😂😂😂
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Массив olevariant в json
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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