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-parser , perpustakaan yang ringan dan dapat disesuaikan untuk parsing string JSON parsial. Ini demo.
(Perhatikan bahwa ada implementasi JavaScript juga)
pip install partial-json-parser # or poetry / pdm / uv partial-json-parser diimplementasikan murni dalam Python, dengan petunjuk tipe yang baik. Ini adalah ketergantungan nol dan bekerja dengan Python 3.6+.
Anda dapat menginstal Run Demo Playground -nya dengan memasang rich juga atau:
pip install partial-json-parser[playground] Kemudian jalankan json-playground di terminal Anda, dan Anda dapat mencoba parser secara interaktif.
from partial_json_parser import loads
> >> loads ( '{"key": "v' ) # {'key': 'v'} Atau, Anda dapat menggunakan ensure_json untuk mendapatkan string JSON yang sudah selesai:
from partial_json_parser import ensure_json
> >> ensure_json ( '{"key": "v' ) # '{"key": "v"}' Anda dapat mengimpor fungsi loads dan objek Allow dari perpustakaan seperti ini:
from partial_json_parser import loads , Allow 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 loads berfungsi seperti json.loads .
result = loads ( '{"key":"value"}' )
print ( result ) # Outputs: {'key': 'value'} Anda dapat mengurai string JSON parsial dengan meneruskan parameter tambahan ke fungsi loads . Parameter ini sedikit bitwise atau konstanta dari bendera Allow :
(Perhatikan bahwa Anda dapat secara langsung mengimpor konstanta yang Anda butuhkan dari partial-json-parser )
from partial_json_parser import loads , Allow , STR , OBJ
result = loads ( '{"key": "v' , STR | OBJ )
print ( 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 dikt. 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 = loads ( '{"key": "v' , OBJ )
print ( result ) # Outputs: {}
result = loads ( '{"key": "value"' , OBJ )
print ( result ) # Outputs: {'key': 'value'}Kesamaan, Anda dapat menguraikan daftar parsial atau bahkan nilai khusus parsial jika Anda mengizinkannya:
(Perhatikan bahwa allow default untuk Allow.ALL )
result = loads ( '[ {"key1": "value1", "key2": [ "value2' )
print ( result ) # Outputs: [{'key1': 'value1', 'key2': ['value2']}]
result = loads ( "-Inf" )
print ( result ) # Outputs: -inf Jika string JSON cacat, fungsi parse akan melempar kesalahan:
loads ( "wrong" ) # MalformedJSON: Malformed node or string on line 1 json_string <string> : String (tidak lengkap) JSON untuk parse.allow_partial <Allow | int> : Tentukan jenis parsial yang diizinkan selama parsing JSON (default: Allow.ALL ).parser (str) -> JSON : Parser JSON biasa. Default adalah json.loads . Lengkapi string JSON dan parsing dengan fungsi parser .
Mengembalikan nilai Python yang diuraikan.
Alias: decode , parse_json .
json_string <string> : String (tidak lengkap) JSON untuk menyelesaikan.allow_partial <Allow | int> : Tentukan jenis parsial yang diizinkan selama parsing JSON (default: Allow.ALL ).Mengembalikan string JSON yang sudah selesai.
json_string <string> : String (tidak lengkap) JSON untuk menyelesaikan.allow_partial <Allow | int> : Tentukan jenis parsial yang diizinkan selama parsing JSON (default: Allow.ALL ).Mengembalikan tuple dari sepotong string input dan penyelesaian.
Perhatikan bahwa ini adalah API tingkat rendah, hanya berguna untuk debugging dan demonstrasi.
Kelas enum yang menentukan jenis parsial yang diizinkan selama penguraian JSON. Itu memiliki anggota 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.git
cd partial-json-parser
pdm installKemudian, Anda dapat menjalankan tes menggunakan hipotesis dan pytest:
pdm testHarap 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.