Às vezes, precisamos de LLM (grandes modelos de linguagem) para produzir informações estruturais em vez de linguagem natural. A maneira mais fácil é usar o JSON.
Mas antes de receber o último sinal de resposta, o JSON está quebrado, o que significa que você não pode usar JSON.parse
para decodificá -lo. Mas ainda queremos transmitir os dados para o usuário.
Aí vem partial-json
, uma biblioteca leve e personalizável para analisar strings parciais do JSON. Aqui está uma demonstração.
(Observe que também existe uma implementação do Python)
npm i partial-json # or pnpm / bun / yarn
partial-json
é implementado puramente em JavaScript e possui compilações commonjs
e esm
.
Você pode importar a função parse
e o objeto Allow
da biblioteca como este:
import { parse , Allow } from "partial-json" ;
O objeto Allow
é apenas uma enumeração de opções. Determina quais tipos podem ser parciais. Os tipos não incluídos no allow
apenas aparecem após a conclusão da sua conclusão.
A função parse
funciona como o JSON.parse
embutido ao analisar uma string JSON completa:
let result = parse ( '{"key":"value"}' ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Você pode analisar uma sequência JSON parcial passando um parâmetro adicional para a função parse
. Este parâmetro é um bit netwise ou das constantes do objeto Allow
:
(Observe que você pode importar diretamente as constantes que você precisa de partial-json
)
import { parse , STR , OBJ } from "partial-json" ;
result = parse ( '{"key": "v' , STR | OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'v' }
Neste exemplo, Allow.STR
diz ao analisador que está tudo bem se uma string estiver incompleta e Allow.OBJ
. O analisador tenta retornar o máximo de dados possível.
Se você não permitir seqüências parciais, ela não adicionará "key"
ao objeto porque "v
não está perto:
result = parse ( '{"key": "v' , OBJ ) ;
console . log ( result ) ; // Outputs: {}
result = parse ( '{"key": "value"' , OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Similaridade, você pode analisar matrizes parciais ou até valores especiais parciais se permitir:
(Observe que allow
que os padrões Allow.ALL
)
result = parse ( '[ {"key1": "value1", "key2": [ "value2' ) ;
console . log ( result ) ; // Outputs: [ { key1: 'value1', key2: [ 'value2' ] } ]
result = parse ( "-Inf" ) ;
console . log ( result ) ; // Outputs: -Infinity
Se a string json estiver malformada, a função parse
lançará um erro:
parse ( "wrong" ) ; // MalformedJSON [Error]: SyntaxError: Unexpected token 'w', "wrong" is not valid JSON at position 0
jsonString
<string>
: a string json para analisar.allowPartial
<number>
: Especifique que tipo de parcialidade é permitida durante a análise JSON (Padrão: Allow.ALL
).Retorna o valor JavaScript analisado.
Um objeto que especifica que tipo de parcialidade é permitido durante a análise JSON. Tem as seguintes propriedades:
STR
: Permitir uma corda parcial.NUM
: permita o número parcial.ARR
: Permitir uma matriz parcial.OBJ
: Permitir objeto parcial.NULL
: Deixe nulo parcial.BOOL
: Permita booleano parcial.NAN
: Permitir Nan parcial.INFINITY
: permita o infinito parcial._INFINITY
: permita parcial -infinity.INF
: Permitir infinidade parcial e -infinity.SPECIAL
: permita todos os valores especiais.ATOM
: Permita todos os valores atômicos.COLLECTION
: permita todos os valores de coleta.ALL
: permita todos os valores. Para executar os testes para esta biblioteca, você deve clonar o repositório e instalar as dependências:
git clone https://github.com/promplate/partial-json-parser-js.git
cd partial-json-parser-js
npm i
Em seguida, você pode executar os testes usando o Vitest:
npm run test
Observe que, embora nos esforcemos para cobrir o maior número possível de casos de borda, é sempre possível que alguns casos não sejam cobertos.
Este projeto está licenciado sob a licença do MIT.