تحويل سلسلة الاستعلام إلى JSON وفك ترميز المعلمات
يسهل التعرّف على سلسلة الاستعلام، لكن فحصها يصبح صعبًا عندما تتضمن محارف مرمّزة وقيمًا فارغة ومرشحات متكررة وإشارات خاصة بالتطبيق.
شغّل الأداة مجانًا
يحوّل هذا المحوّل صيغة النقل المضغوطة إلى كائن JSON منظم يمكنكم قراءته أو نسخه أو مقارنته أو إدخاله في مسار لتصحيح الأخطاء. يفك تسلسلات النسبة المئوية وفق UTF-8، ويفسر علامة الجمع بوصفها مسافة، ويحافظ على القيم الفارغة، ويمثل أسماء المعلمات المتكررة في مصفوفات وفق ترتيب ورودها. تتم العملية بصورة حتمية، ولذلك تلائم فحص الطلبات وإعداد بيانات الاختبار ومراجعة السجلات وبناء أدوات المطورين.
حوّلوا معلمات الطلب المضغوطة إلى كائن واضح
صُممت سلاسل الاستعلام لنقل البيانات، لا لتوفير قراءة مريحة للبشر. فقد يرسل المتصفح أو العميل في سطر مضغوط واحد عبارة بحث وعدة وسوم مختارة وحقلًا اختياريًا فارغًا وموقعًا يتضمن محارف دولية. ألصقوا في المحوّل الجزء الواقع بعد مسار URL، مع علامة الاستفهام الأولى أو من دونها، فتفصل النتيجة كل معلمة في خاصية JSON مستقلة. تبقى المعلمة المكتوبة من دون علامة مساواة بقيمة نصية فارغة، شأنها شأن المعلمة التي تتبعها علامة مساواة من دون محتوى. أما المقاطع الفارغة بين علامات العطف فتُهمل لأنها لا تحمل معلمة. يتيح ذلك مقارنة الناتج بحالة التطبيق بوضوح: تظل القيم ظاهرة، ولا تضيع الفراغات، وتبين العدادات عدد المفاتيح المختلفة والعدد الإجمالي للأزواج المعالجة. لا يتصل المحلل بالخادم المقصود ولا يستنتج أنواع البيانات الوظيفية، ولذلك تبقى قيم مثل true و42 وnull نصوصًا. يجعل هذا السلوك المتوقع JSON تمثيلًا أمينًا لما حمله الاستعلام فعلًا، بدل أن يضيف إليه افتراضات قد تربك عملية التصحيح.
افهموا طريقة فك الترميز ومعالجة المفاتيح المتكررة
يُفك ترميز كل مفتاح وكل قيمة بصورة مستقلة وفق القواعد المعتادة لنماذج الويب. تتحول علامة الجمع إلى مسافة، وتتحول تسلسلات النسبة المئوية مثل %20 وتسلسلات UTF-8 متعددة البايتات إلى المحارف المقصودة. لا تكون علامة المساواة فاصلًا إلا عند أول ظهور لها داخل الزوج، ولذلك يجوز أن تحتوي القيمة على علامات مساواة أخرى من دون تقسيمها مجددًا. تُحفظ المفاتيح المتكررة بدل استبدالها: يبدأ الظهور الأول كنص، ويحوّل الظهور الثاني الخاصية إلى مصفوفة، ثم تُضاف القيم اللاحقة حسب ترتيب وصولها. فمثلًا ينتج عن tag=sale&tag=new مصفوفة tag تحتوي sale ثم new. يفيد ذلك في المرشحات ومجموعات مربعات الاختيار والأطر التي تسلسل اختيارات متعددة تحت اسم حقل واحد. يؤدي أي تسلسل مئوي غير صالح إلى خطأ إدخال بدل تقديم نتيجة جزئية، كما تُرفض البايتات المرمّزة التي لا تكوّن UTF-8 صالحًا. يمنع هذا الفشل الصريح نتيجة تبدو معقولة بينما تخفي طلبًا تالفًا. يتضمن pair_count مرات التكرار، بينما يحصي key_count أسماء المفاتيح المفكوكة المختلفة.
استخدموا الناتج في الاختبارات والسجلات وتشخيص الطلبات
يفيد الكائن المحوّل كلما احتجتم إلى فهم الاستعلام قبل أن يتصرف البرنامج بناءً عليه. أثناء تطوير API، ألصقوا سلسلة استعلام لطلب فاشل وقارنوا JSON المفكوك بالمعلمات التي يتوقعها المسار. وفي الاختبارات الآلية، حوّلوا سلاسل نموذجية إلى بيانات ثابتة وتحققوا من وصول المرشحات المتكررة والنصوص الدولية وعلامات الجمع والحقول الفارغة بالشكل المطلوب. عند مراجعة السجلات، تكون البنية المنظمة أسهل قراءة ومقارنة من سطر طويل مرمّز، ولا سيما عندما يتكرر المفتاح نفسه. يتجنب المحوّل عمدًا تحويل الأنواع بحسب مخطط مفترض. فإذا كان تطبيقكم يتوقع رقمًا أو قيمة منطقية أو تاريخًا أو صيغة متداخلة تعتمد الأقواس، فطبّقوا تحقق التطبيق بعد التحليل. يمنع هذا الحد أداة عامة من اختراع دلالات لم يحددها المرسل. كذلك تُعامل أسماء الخصائص بأمان بوصفها بيانات حتى إن شابهت أسماء داخلية في JavaScript. استخدموا نسخة المتصفح للفحص السريع، أو استدعوا API مقابل $0.002 عندما يحتاج خط معالجة أو مشغل اختبارات أو نظام مراقبة إلى تكرار التحويل الحتمي نفسه.
حالات الاستخدام
صححوا أخطاء طلب API
فكوا الاستعلام الدقيق الذي أرسله العميل، وقارنوا مفاتيحه وقيمه الفارغة ومرشحاته المتكررة بعقد المسار.
أنشئوا بيانات اختبار ثابتة
حوّلوا سلاسل استعلام نموذجية إلى نتائج JSON حتمية لاختبارات التكامل والانحدار.
افحصوا البيانات المرمّزة في السجلات
اجعلوا المعلمات المرمّزة مقروءة قبل تحليل البحث أو إعادة التوجيه أو عمليات تكامل التتبع.
الأسئلة الشائعة
ما تكلفة استخدام المحوّل؟
أداة المتصفح مجانية. تستخدم طلبات API السعر الأساسي المنشور وقدره $0.002.
هل يمكن إدراج علامة الاستفهام الأولى؟
نعم. يمكن أن يبدأ الإدخال بعلامة استفهام، أو أن يقتصر على المحارف التي تأتي بعدها.
كيف تُمثل أسماء المعلمات المتكررة؟
يحمل المفتاح الذي يظهر مرة واحدة قيمة نصية، وعند تكراره تصبح قيمه مصفوفة وفق ترتيبها الأصلي.
هل تُفك علامات الجمع والترميزات المئوية؟
نعم. تتحول علامات الجمع إلى مسافات، وتُفك البايتات المئوية الصالحة وفق UTF-8 في المفاتيح والقيم.
هل تتحول الأرقام والقيم المنطقية إلى أنواع JSON؟
لا. تُعاد المعلمات كنصوص كي لا يفترض المحوّل مخططًا أو يغير البيانات التي أرسلها المصدر.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/query-string-to-json \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"?search=blue+shoes&tag=sale&tag=new&city=S%C3%A3o+Paulo&empty="}'const res = await fetch("https://api.kit.forhosting.com/dev/query-string-to-json", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "?search=blue+shoes&tag=sale&tag=new&city=S%C3%A3o+Paulo&empty="
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/query-string-to-json",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "?search=blue+shoes&tag=sale&tag=new&city=S%C3%A3o+Paulo&empty="
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/query-string-to-json", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"?search=blue+shoes&tag=sale&tag=new&city=S%C3%A3o+Paulo&empty="}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"?search=blue+shoes&tag=sale&tag=new&city=S%C3%A3o+Paulo&empty="}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/query-string-to-json", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "?search=blue+shoes&tag=sale&tag=new&city=S%C3%A3o+Paulo&empty="
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.query_string_to_json",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |