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;
...