Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2017, 13:48   #1
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию Разбор json в dbxjson полученный от synapse

Получаю данные через Synapse в кодировке UTF8. Затем его надо прогнать через функцию StripNonJson и "засунуть" в переменную типа TJsonObject.

Код:
function StripNonJson(s: string): string; // Убирает лишние пробелы из json-строки
var
  ch: char;
  inString: boolean;
begin
  Result := '';
  inString := false;
  for ch in s do
  begin
    if ch = '"' then
      inString := not inString;
    if TCharacter.IsWhiteSpace(ch) and not inString then
      continue;
    Result := Result + ch;
  end;
end;
 
function MemoryStreamToString(M: TMemoryStream): string;
begin
  SetString(Result, PChar(M.Memory), M.Size div SizeOf(Char));
end;
 
 
var
  json: TJSONObject;
  // ...
 
begin
  // ...
  
  with THTTPSend.Create do
  begin
    try
      MimeType := 'application/x-www-form-urlencoded';
      Document.LoadFromStream(data);
      if HTTPMethod('POST', 'http://httpbin.org/post') then
      begin
        WriteLn('res=' + MemoryStreamToString(Document));
        json := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(MemoryStreamToString(Document))), 0) as TJSONObject;
 
        if Assigned(Json) then
        begin
          WriteLn('Json parsed!');
        end
        else
        begin
          WriteLn('Error parsing JSON!');
        end;
      end
      else
      begin
        WriteLn('Request error: ' + IntToStr(ResultCode) + ' ' + ResultString);
      end;
    finally
      Free;
    end;
  end;
 
end.
На экран выходят крякозябры и естественно в переменной json пусто.
delphi json.png

Я так понимаю нужно перевести Document из utf8 в родной для Delphi 2010 unicode, но не знаю как это сделать.
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 29.01.2017, 02:34   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Выходят потому что делаете кучу неправильной и ненужной работы.
StripNonJson - зачем? JSON-парсер нормально написан, ему по барабану любое количество пробелов.
MemoryStreamToString - что это за функция порчи данных, и зачем оно забирает их из памяти? Есть TStringStream, откуда можно вытащить DataString в читаемом виде.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбор JSON и Synapse CraZZZy-GameRRR Работа с сетью в Delphi 4 18.01.2017 10:44
Работа с DBXJSON Skynet_07 Общие вопросы Delphi 0 16.05.2016 12:09
JSON (SuperObject) and Synapse(HTTPS) LiteCrew Работа с сетью в Delphi 1 15.02.2015 20:34
JSON и DBXJSON (Delphi XE3) Lardes Общие вопросы Delphi 3 12.03.2013 11:26
Разбор JSON данных AndreyK Общие вопросы Delphi 0 29.10.2010 22:55