0.0.2 • Published 2 years ago

@bitacode/json-recognizer v0.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

json-recognizer

npm License

This library recognizes jsons inside a flow of chars.

This library follows the minimal dependencies principle.

Usage

Refer to the sources in the integration folder.

const parseFunction = initJsonRecognizer() // Initialize the recognizer
const recognizedJsons = parseFunction(rawtring) // Call the parse function with raw string containing JSON
const recognizedJsons2 = parseFunction(rawString2) // Call the parse function with raw string containins JSON

The recognizedJsons and recognizedJsons2 vars will contain the jsons.

The initJsonRecognizer() call initializes an internal state machine that is able to recognize jsons that lies between rawString and rawString2.

Usage with streams

The src/streams/recognizeJsonTransformStream.ts module contains a transform stream that receives as raw strings chunks stream and provide as output JSON objects stream.

Refer to the related integration for stream usage.

High-level code explanation

The library entrypoint is the initJsonRecognizer() function. This second-order function returns an anonymous function that receives the chunk string, this chunk contains JSONs parts. For clarity, we call this anonymous function recognize().

The recognize() function receives the chunk, then instantiate the parse()(src/recognizer/parserWrapper.ts) function calling the parseWrapper(). This function instantiates the generator that, by scanning the chunk char by char, recognizes the Json(s) inside it using an internal status built from previous scans. parse() function is basically a call to generator's next() function.

What's next?

The library now is still in development phase revision (as per semver) 0.x.y.

There are some known bugs and missing implementations:

  • Stream recognizer duplicates the last recognized json when receiving new line as last char.
  • JSON arrays are not recognized as valid input.

A new implementation based on pure state machine instead of Javascript generators is coming. This new version is meant to solve the bug above and to simplify the internal architecture.

License

Distributed under the MIT License.