@artem78

Как разобрать 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 пусто.

79684b1caf4944b9a2cfa2691d716ef6.png

Я так понимаю нужно перевести Document из utf8 в родной для Delphi 2010 unicode, но не знаю как это сделать.
  • Вопрос задан
  • 478 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы