[教程]使用 TQJsonInputChannel 来重复获取 JSON 对象

TQJsonInputChannel 是 QJson 新增的对象,目的是解决连续的JSON序列读取和超长的JSON数据内容读取处理的问题。

【基本步骤】

1、根据源的编码,创建对应的序列对象并设置相关事件:

var
  AHelper:TQJsonInputChannel;
begin
  AHelper:=TQJsonInputChannel.Create(teUtf8);
  AHelper.OnJsonReady:=DoJsonReady;
  AHelper.OnParseError:=DoParseError;

2、从源中读取一块数据,然后推到 TQJsonInputChannel 实例中,不需要关心读取的块是否完整,TQJsonInputChannel 会自动检查,当收到一个完整的 JSON 数据时,会触发 OnJsonReady 事件,供上层处理。比如下面的代码是有效的:

  AHelper.Push('{"name"');
  AHelper.Push(':100}');

上述代码生成的 JSON 对象:

{"name":100}

【示例1:从流中加载】

假设流中包含下面的JSON序列:

{"id":1001,"name":"qdac"}{"id":1002,"name":"projectZ"}

我们创建一个流对象,从这个流中读取数据,就可以触发两次 OnJsonReady,收到两个 JSON 序列。

如果是下面格式的 JSON,我们只需要将第一个字符跳过即可。

[{"id":1001,"name":"qdac"},{"id":1002,"name":"projectZ"}]

上面的代码同样会触发两次 OnJsonReady,收到两个 JSON 序列。

分享到: