JSONLoader
Streaming loader for JSON encoded files.
Loader | Characteristic |
---|---|
File Extension | .json |
Media Type | application/json |
File Type | Text |
File Format | JSON |
Data Format | Classic Table |
Supported APIs | load , parse , parseSync , parseInBatches |
Usage​
For simple usage, you can load and parse a JSON file atomically:
import {JSONLoader} from '@loaders.gl/json';
import {load} from '@loaders.gl/core';
const data = await load(url, JSONLoader, {json: options});
For larger files, JSONLoader supports streaming JSON parsing, in which case it will yield "batches" of rows from one array.
To parse a stream of GeoJSON, the user can specify the options.json.jsonpaths
to stream the features
array.
import {JSONLoader} from '@loaders.gl/json';
import {loadInBatches} from '@loaders.gl/core';
const batches = await loadInBatches('geojson.json', JSONLoader, {json: {jsonpaths: ['$.features']}});
for await (const batch of batches) {
// batch.data will contain a number of rows
for (const feature of batch.data) {
switch (feature.geometry.type) {
case 'Polygon':
...
}
}
}
If no JSONPath is specified the loader will stream the first array it encounters in the JSON payload.
When batch parsing an embedded JSON array as a table, it is possible to get access to the containing object supplying the {metadata: true}
option.
The loader will yield an initial and a final batch with batch.container
providing the container object and batch.batchType
set to partial-result
and final-result
respectively.
import {JSONLoader} from '@loaders.gl/json';
import {loadInBatches} from '@loaders.gl/core';
const batches = await loadInBatches('geojson.json', JSONLoader);
for await (const batch of batches) {
switch (batch.batchType) {
case 'partial-result': // contains fields seen so far
case 'final-result': // contains all fields except the streamed array
console.log(batch.container);
break;
case 'data':
// batch.data will contain a number of rows
for (const feature of batch.data) {
switch (feature.geometry.type) {
case 'Polygon':
...
}
}
}
}
Data Format​
Parsed batches are of the format
{
batchType: 'metadata' | 'partial-result' | 'final-result' | undefined;
jsonpath: string;
// standard batch payload
data: any[] | any;
bytesUsed: number;
batchCount: number;
}
Options​
Supports table category options such as batchType
and batchSize
.
Option | From | Type | Default | Description |
---|---|---|---|---|
json.table | [] | boolean | false | Parses non-streaming JSON as table, i.e. return the first embedded array in the JSON. Always true during batched/streaming parsing. |
json.jsonpaths | [] | string[] | [] | A list of JSON paths (see below) indicating the array that can be streamed. |
metadata (top level) | [] | boolean | If true , yields an initial and final batch containing the partial and final result (i.e. the root object, excluding the array being streamed). |
JSONPaths​
A minimal subset of the JSONPath syntax is supported, to specify which array in a JSON object should be streamed as batchs.
$.component1.component2.component3
- No support for wildcards, brackets etc. Only paths starting with
$
(JSON root) are supported. - Regardless of the paths provided, only arrays will be streamed.
Attribution​
This loader is based on a fork of dscape's clarinet
under BSD 2-clause license.