Terkadang kita membutuhkan LLM (model bahasa besar) untuk menghasilkan informasi struktural alih -alih bahasa alami. Cara termudah adalah dengan menggunakan JSON.
Tetapi sebelum menerima token terakhir dari respons, JSON rusak, yang berarti Anda tidak dapat menggunakan JSON.parse
untuk memecahkan kode. Tapi kami masih ingin mengalirkan data ke pengguna.
Di sini datang partial-json
, perpustakaan yang ringan dan dapat disesuaikan untuk parsing string JSON parsial. Ini demo.
(Perhatikan bahwa ada implementasi Python juga)
npm i partial-json # or pnpm / bun / yarn
partial-json
diimplementasikan murni dalam JavaScript, dan memiliki build commonjs
dan esm
.
Anda dapat mengimpor fungsi parse
dan benda Allow
dari perpustakaan seperti ini:
import { parse , Allow } from "partial-json" ;
Objek Allow
hanyalah enum untuk opsi. Ini menentukan jenis apa yang bisa sebagian. Jenis yang tidak termasuk dalam allow
hanya muncul setelah penyelesaiannya dapat dipastikan.
Fungsi parse
berfungsi seperti JSON.parse
bawaan saat menguraikan string JSON lengkap:
let result = parse ( '{"key":"value"}' ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Anda dapat mengurai string JSON parsial dengan meneruskan parameter tambahan ke fungsi parse
. Parameter ini sedikit bitwise atau konstanta dari objek Allow
:
(Perhatikan bahwa Anda dapat secara langsung mengimpor konstanta yang Anda butuhkan dari partial-json
)
import { parse , STR , OBJ } from "partial-json" ;
result = parse ( '{"key": "v' , STR | OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'v' }
Dalam contoh ini, Allow.STR
memberi tahu parser bahwa tidak apa -apa jika string tidak lengkap, dan Allow.OBJ
memberi tahu parser sehingga sebagai objek. Parser kemudian mencoba mengembalikan data sebanyak mungkin.
Jika Anda tidak mengizinkan string parsial, maka itu tidak akan menambahkan "key"
ke objek karena "v
tidak dekat:
result = parse ( '{"key": "v' , OBJ ) ;
console . log ( result ) ; // Outputs: {}
result = parse ( '{"key": "value"' , OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Kesamaan, Anda dapat menguraikan array parsial atau bahkan nilai khusus parsial jika Anda mengizinkannya:
(Perhatikan bahwa allow
default untuk Allow.ALL
)
result = parse ( '[ {"key1": "value1", "key2": [ "value2' ) ;
console . log ( result ) ; // Outputs: [ { key1: 'value1', key2: [ 'value2' ] } ]
result = parse ( "-Inf" ) ;
console . log ( result ) ; // Outputs: -Infinity
Jika string JSON cacat, fungsi parse
akan melempar kesalahan:
parse ( "wrong" ) ; // MalformedJSON [Error]: SyntaxError: Unexpected token 'w', "wrong" is not valid JSON at position 0
jsonString
<string>
: string JSON untuk parse.allowPartial
<number>
: Tentukan jenis parsial yang diizinkan selama parsing JSON (default: Allow.ALL
).Mengembalikan nilai JavaScript yang diuraikan.
Objek yang menentukan jenis parsial yang diizinkan selama penguraian JSON. Ini memiliki properti berikut:
STR
: Izinkan string parsial.NUM
: Izinkan nomor parsial.ARR
: Izinkan array parsial.OBJ
: Izinkan objek parsial.NULL
: Izinkan nol parsial.BOOL
: Izinkan boolean parsial.NAN
: Izinkan Nan parsial.INFINITY
: Izinkan infinity parsial._INFINITY
: Izinkan parsial -infinity.INF
: Biarkan kedua infinity parsial dan -infinitas.SPECIAL
: Izinkan semua nilai khusus.ATOM
: Izinkan semua nilai atom.COLLECTION
: Izinkan semua nilai koleksi.ALL
: Izinkan semua nilai. Untuk menjalankan tes untuk perpustakaan ini, Anda harus mengkloning repositori dan menginstal dependensi:
git clone https://github.com/promplate/partial-json-parser-js.git
cd partial-json-parser-js
npm i
Kemudian, Anda dapat menjalankan tes menggunakan Vitest:
npm run test
Harap dicatat bahwa sementara kami berusaha untuk menutupi sebanyak mungkin kasus tepi, selalu mungkin bahwa beberapa kasus mungkin tidak ditanggung.
Proyek ini dilisensikan di bawah lisensi MIT.