A veces necesitamos LLM (modelos de idiomas grandes) para producir información estructural en lugar de lenguaje natural. La forma más fácil es usar JSON.
Pero antes de recibir el último token de respuesta, el JSON está roto, lo que significa que no puede usar JSON.parse
para decodificarlo. Pero aún queremos transmitir los datos al usuario.
Aquí viene partial-json
, una biblioteca liviana y personalizable para analizar las cuerdas JSON parciales. Aquí hay una demostración.
(Tenga en cuenta que también hay una implementación de Python)
npm i partial-json # or pnpm / bun / yarn
partial-json
se implementa puramente en JavaScript, y tiene compilaciones commonjs
y esm
.
Puede importar la función parse
y el objeto Allow
desde la biblioteca así:
import { parse , Allow } from "partial-json" ;
El objeto Allow
es solo una enumación para las opciones. Determina qué tipos pueden ser parciales. Los tipos no incluidos en allow
solo aparecen después de que se puede garantizar su finalización.
La función parse
funciona al igual que el JSON.parse
incorporado al analizar una cadena JSON completa:
let result = parse ( '{"key":"value"}' ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Puede analizar una cadena JSON parcial pasando un parámetro adicional a la función parse
. Este parámetro es un bitwise o de las constantes desde el objeto Allow
:
(Tenga en cuenta que puede importar directamente las constantes que necesita de partial-json
)
import { parse , STR , OBJ } from "partial-json" ;
result = parse ( '{"key": "v' , STR | OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'v' }
En este ejemplo, Allow.STR
le dice al analizador que está bien si una cadena está incompleta, y Allow.OBJ
le dice al analizador así como un objeto. El analizador luego intenta devolver tantos datos como pueda.
Si no permite cadenas parciales, no agregará "key"
al objeto porque "v
no está cerca:
result = parse ( '{"key": "v' , OBJ ) ;
console . log ( result ) ; // Outputs: {}
result = parse ( '{"key": "value"' , OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Similitud, puede analizar matrices parciales o incluso valores especiales parciales si lo permite:
(Tenga en cuenta que allow
que los valores predeterminados Allow.ALL
.
result = parse ( '[ {"key1": "value1", "key2": [ "value2' ) ;
console . log ( result ) ; // Outputs: [ { key1: 'value1', key2: [ 'value2' ] } ]
result = parse ( "-Inf" ) ;
console . log ( result ) ; // Outputs: -Infinity
Si la cadena JSON está malformada, la función parse
lanzará un error:
parse ( "wrong" ) ; // MalformedJSON [Error]: SyntaxError: Unexpected token 'w', "wrong" is not valid JSON at position 0
jsonString
<string>
: la cadena JSON para analizar.allowPartial
<number>
: especifique qué tipo de parcialidad está permitida durante el análisis JSON (predeterminado: Allow.ALL
).Devuelve el valor de JavaScript analizado.
Un objeto que especifica qué tipo de parcialidad está permitida durante el análisis de JSON. Tiene las siguientes propiedades:
STR
: Permitir cadena parcial.NUM
: Permitir el número parcial.ARR
: Permitir una matriz parcial.OBJ
: Permitir objeto parcial.NULL
: Permitir nulo parcial.BOOL
: Permitir booleano parcial.NAN
: Permitir nan parcial.INFINITY
: Permitir el infinito parcial._INFINITY
: permita la infinidad parcial.INF
: Permitir tanto el infinito y la infinidad parciales.SPECIAL
: Permitir todos los valores especiales.ATOM
: Permitir todos los valores atómicos.COLLECTION
: Permitir todos los valores de colección.ALL
: Permitir todos los valores. Para ejecutar las pruebas para esta biblioteca, debe clonar el repositorio e instalar las dependencias:
git clone https://github.com/promplate/partial-json-parser-js.git
cd partial-json-parser-js
npm i
Luego, puede ejecutar las pruebas usando Vitest:
npm run test
Tenga en cuenta que si bien nos esforzamos por cubrir tantos casos de borde como sea posible, siempre es posible que algunos casos no estén cubiertos.
Este proyecto tiene licencia bajo la licencia MIT.