在Delphi 7中处理base64时,ulkJSON库是否有局限性?

时间:2014-07-29 17:18:44

标签: json delphi rest

我正在开发一个使用Delphi 7来使用RESTful服务的项目。我们正在使用ulkJSON库创建和解码JSON。到目前为止,我已经能够成功构建并发送包含超过5,160kb的base64字符串的JSON。我可以验证服务是否正在接收base64,并验证base64的完整性。除了发送之外,我还可以使用更小的(~256KB或更小)base64接收并成功解码JSON。

然而,由于某些原因涉及较大(~1,024KB +)base64时,我在回程中遇到一些问题。特别是在尝试使用以下JSON格式和函数组合时:

JSON:

{ 
    "message" : "/9j/4AAQSkZJRgABAQEAYABgAAD...." 
}

功能:

function checkResults(JSONFormattedString: String): String;
var
  jsonObject          : TlkJSONObject;
  iteration           : Integer;
  i                   : Integer;
  x                   : Integer;
begin
  jsonObject := TlkJSONobject.Create;

  // Validate that the JSONFormatted string is not empty.
  // If it is empty, inform the user/programmer, and exit from this routine.
  if JSONFormattedString = '' then
    begin
        result := 'Error: JSON returned is Null';
        jsonObject.Free;
        exit;
    end;

  // Now that we can validate that this string is not empty, we are going to
  // assume that the string is a JSONFormatted string and attempt to parse it.
  //
  // If the string is not a valid JSON object (such as an http status code)
  // throw an exception informing the user/programmer that an unexpected value
  // has been passed. And exit from this routine.
  try
    jsonObject := TlkJSON.ParseText(JSONFormattedString) as TlkJSONobject;
  except
    on e:Exception do
    begin
        result := 'Error: No JSON was received from web services';
        jsonObject.Free;
        exit;
    end;
  end;

  // Now that the object has been parsed, lets check the contents.
  try
      result := jsonObject.Field['message'].value;
      jsonObject.Free;
      exit;
  except
    on e:Exception do
    begin
      result := 'Error: No Message received from Web Services '+e.message;
      jsonObject.Free;
      exit;
    end;
  end;

end;

如上所述,当使用上述功能时,我可以从'消息中获得小的(256KB及更少)base64字符串。 JSON对象的字段。但由于某些原因,如果收到的JSON大于1,024kb,则以下行似乎停在其轨道上:

    jsonObject := TlkJSON.ParseText(JSONFormattedString) as TlkJSONobject;

没有错误,没有结果。在调试器之后,我可以进入库,并且看到传递的JSON字符串不被认为是JSON,尽管它是上面列出的格式。我可以在按预期工作的调用和不按预期工作的调用之间找到的唯一区别似乎是传输的base64的大小。

我是否遗漏了一些完全明显的东西,应该为我的代码实现拍摄(非常可能)?我是否错过了有关ulkJSON库限制的一些注释?任何输入都会非常有用。在提前堆叠谢谢!

1 个答案:

答案 0 :(得分:0)

因此,经过一段时间的调查几个小时后,我确实发现图书馆确实运作正常,没有问题。

问题归结为我的机器的性能,因为它平均需要215802毫秒(3.5967分钟)来处理base64格式的中等大小的图像(1.2兆)。此性能根据base64字符串的大小进行缩放(较小的较大,较大的较长)。