@loaders.gl/json
Version:
Framework-independent loader for JSON and streaming JSON formats
36 lines • 1.41 kB
JavaScript
// loaders.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import { TableBatchBuilder } from '@loaders.gl/schema-utils';
import { makeLineIterator, makeNumberedLineIterator, makeTextDecoderIterator, toArrayBufferIterator } from '@loaders.gl/loader-utils';
export async function* parseNDJSONInBatches(binaryAsyncIterator, options) {
const textIterator = makeTextDecoderIterator(toArrayBufferIterator(binaryAsyncIterator));
const lineIterator = makeLineIterator(textIterator);
const numberedLineIterator = makeNumberedLineIterator(lineIterator);
const schema = null;
const shape = 'row-table';
// @ts-ignore
const tableBatchBuilder = new TableBatchBuilder(schema, {
...(options?.core || options),
shape
});
for await (const { counter, line } of numberedLineIterator) {
try {
const row = JSON.parse(line);
tableBatchBuilder.addRow(row);
tableBatchBuilder.chunkComplete(line);
const batch = tableBatchBuilder.getFullBatch();
if (batch) {
yield batch;
}
}
catch (error) {
throw new Error(`NDJSONLoader: failed to parse JSON on line ${counter}`);
}
}
const batch = tableBatchBuilder.getFinalBatch();
if (batch) {
yield batch;
}
}
//# sourceMappingURL=parse-ndjson-in-batches.js.map