[教程]使用 QJson 解析 JsonL 格式数据

QJson 在早期设计时就支持块解析,JsonL 只是一种特殊的 Json 块,我们可以直接使用其中的 ParseBlock 函数来完成对 JsonL 的支持。

ParseBlock 提供两种重载,如果是一个内存的 JsonL 格式的数据,那么我们可以直接用下面的代码:

var
  AJsonL:UnicodeString;
  p,ps:PWideChar;
  AJson:TQJson;
begin
  AJsonL:='{"a":1223,"b":true}{"a":987,"b":false}";
  p:=PWideChar(AJsonL);
  ps:=p;
  AJson:=AcquireJson;
  while p^<>#0 do
  begin
    if AJson.TryParseBlock(p) then
    begin
      //处理代码
    end
    else
    begin
      //解析失败
    end;
  end;
end;

如果是一个流对象,则类似上面循环,只不过改成下面的重载就可以。

procedure ParseBlock(AStream: TStream; AEncoding: TTextEncoding);
...
repeat
   AJson.ParseBlock(AStream);
   ....
until AStream.Position=AStream.Size;
...
分享到: