无法在无休止的流上从 StreamTransformer 解析 JSON

Unable to parse JSON from StreamTransformer on unending stream

Dart 新手。 .transform(JsonDecoder()) 似乎会挂起,直到流关闭或如果它开始看到新的 Json 对象就会抛出错误。我可以缓存整个字符串并以这种方式解析它们,但我想利用流的优势,而不是在内存中存储超过需要的内容。

有没有办法让Json解码器在获得完整有效的Json对象后立即将对象推送到接收器?我试过扩展一些内部 类,但只得到一个私有库错误。

https://github.com/dart-lang/sdk/blob/1278bd5adb6a857580f137e47bc521976222f7b9/sdk/lib/_internal/vm/lib/convert_patch.dart#L1500。这似乎是相关的代码,这真的让我很痛苦。我是否需要创建虚拟流或其他内容?

如果输入是换行分隔,你可以这样做:

Stream jsonObjects = inputStream
    .transform(utf8.decoder)  // if incoming is bytes.
    .transform(const LineSplitter())
    .map(jsonDecode);

JsonDecoder 转换器仅适用于单个 JSON 值,因为 JSON 语法不允许 JSON 源文本中有多个值。

LineSplitter 将缓冲直到它有一整行,然后一次发出一行,因此如果每个 JSON 消息单独在一行上,那么每个事件都来自line-splitted 流式传输完整的 JSON 值。