في بعض الأحيان نحتاج إلى LLM (نماذج لغة كبيرة) لإنتاج معلومات هيكلية بدلاً من اللغة الطبيعية. أسهل طريقة هي استخدام JSON.
ولكن قبل تلقي الرمز المميز الأخير للاستجابة ، يتم كسر JSON ، مما يعني أنه لا يمكنك استخدام JSON.parse
لفك تشفيره. لكننا ما زلنا نريد دفق البيانات إلى المستخدم.
هنا يأتي partial-json
، وهي مكتبة خفيفة الوزن وقابلة للتخصيص لحلية سلاسل JSON جزئية. هنا عرض تجريبي.
(لاحظ أن هناك تطبيق Python أيضًا)
npm i partial-json # or pnpm / bun / yarn
يتم تنفيذ partial-json
بحتة في JavaScript ، ولديه كل من commonjs
و esm
.
يمكنك استيراد وظيفة parse
والكائن Allow
من المكتبة مثل هذا:
import { parse , Allow } from "partial-json" ;
الكائن Allow
هو مجرد تعداد للخيارات. يحدد الأنواع التي يمكن أن تكون جزئية. تظهر الأنواع غير المدرجة في allow
فقط بعد إكماله.
تعمل وظيفة parse
تمامًا مثل JSON.parse
المدمجة عند تحليل سلسلة JSON كاملة:
let result = parse ( '{"key":"value"}' ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
يمكنك تحليل سلسلة JSON جزئية عن طريق تمرير معلمة إضافية إلى وظيفة parse
. هذه المعلمة هي قليلا أو الثوابت من الكائن Allow
:
(لاحظ أنه يمكنك استيراد الثوابت التي تحتاجها مباشرة من partial-json
)
import { parse , STR , OBJ } from "partial-json" ;
result = parse ( '{"key": "v' , STR | OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'v' }
في هذا المثال ، Allow.STR
يخبر المحلل أنه لا بأس إذا كانت السلسلة غير مكتملة ، Allow.OBJ
. ثم يحاول المحللون إرجاع أكبر قدر ممكن من البيانات.
إذا لم تسمح بسلاسل جزئية ، فلن يضيف "key"
إلى الكائن لأن "v
غير قريبة:
result = parse ( '{"key": "v' , OBJ ) ;
console . log ( result ) ; // Outputs: {}
result = parse ( '{"key": "value"' , OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
التشابه ، يمكنك تحليل المصفوفات الجزئية أو حتى قيم خاصة جزئية إذا سمحت بذلك:
(لاحظ أن allow
بالتخلف عن Allow.ALL
.
result = parse ( '[ {"key1": "value1", "key2": [ "value2' ) ;
console . log ( result ) ; // Outputs: [ { key1: 'value1', key2: [ 'value2' ] } ]
result = parse ( "-Inf" ) ;
console . log ( result ) ; // Outputs: -Infinity
إذا كانت سلسلة JSON مشوهة ، فسترمي وظيفة parse
خطأً:
parse ( "wrong" ) ; // MalformedJSON [Error]: SyntaxError: Unexpected token 'w', "wrong" is not valid JSON at position 0
jsonString
<string>
: سلسلة JSON إلى تحليل.allowPartial
<number>
: حدد نوع الجزئي المسموح به أثناء تحليل JSON (الافتراضي: Allow.ALL
).إرجاع قيمة JavaScript المحلية.
كائن يحدد نوع الجزئي المسموح به أثناء تحليل JSON. لديها الخصائص التالية:
STR
: السماح بسلسلة جزئية.NUM
: السماح بالرقم الجزئي.ARR
: السماح صفيف جزئي.OBJ
: السماح للكائن الجزئي.NULL
: السماح الجزئي لاغية.BOOL
: السماح الجزئي المنطقي.NAN
: السماح جزئيا نان.INFINITY
: السماح الجزئي اللانهائي._INFINITY
: السماح الجزئي -infinity.INF
: السماح لكل من اللانهاية الجزئية و -infinity.SPECIAL
: السماح لجميع القيم الخاصة.ATOM
: السماح لجميع القيم الذرية.COLLECTION
: السماح لجميع قيم التجميع.ALL
: السماح لجميع القيم. لتشغيل اختبارات هذه المكتبة ، يجب عليك استنساخ المستودع وتثبيت التبعيات:
git clone https://github.com/promplate/partial-json-parser-js.git
cd partial-json-parser-js
npm i
ثم ، يمكنك إجراء الاختبارات باستخدام Vitest:
npm run test
يرجى ملاحظة أنه بينما نسعى جاهدين لتغطية أكبر عدد ممكن من حالات الحافة ، من الممكن دائمًا عدم تغطية بعض الحالات.
هذا المشروع مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.