أداة إصلاح JSON
إصلاح واستعادة ملفات JSON التالفة أو غير الصحيحة تلقائياً—بأمان وسرعة ومجاناً.
تقوم هذه الأداة بإصلاح ملفات JSON التالفة أو غير الصالحة باستخدام تصحيح الأخطاء الآلي. تستهدف الأداة أكثر المشاكل الشائعة في بناء الجملة الموجودة في البيانات المُصدرة، أو سجلات النظام، أو الملفات المعدلة يدويًا — مثل علامات الاقتباس المفقودة، الفواصل الزائدة، أو الأقواس غير المتطابقة — وتنتج مخرجات بتنسيق JSON صالحة وقابلة للتحليل.
قم بإصلاح JSON الخاص بك أدناه
كيف يعمل إصلاح JSON
يقوم الأداة بفحص مدخلاتك لاكتشاف مشاكل شائعة في تركيب JSON وتطبق إصلاحات مستهدفة، مما ينتج JSON صالح عند الإمكان.
- يقوم بتحليل المدخلات وتحديد أخطاء الصياغة الشائعة، بما في ذلك الأحرف غير المسموح بها، والأقواس الموضوعة في غير محلها، وعلامات الاقتباس غير الصحيحة في النصوص.
- يطبق تصحيحات للأخطاء الشائعة—مثل إضافة علامات الاقتباس الناقصة، إزالة الفواصل الزائدة في النهاية، أو تصحيح الأقواس.
- يُخرج ملف JSON المصحح. في معظم الحالات، تكون النتيجة جاهزة للتحليل أو الاستخدام فورًا.
- إذا تعذّر إصلاح الهيكل تلقائيًا، فسيتم عرض خطأ واضح لتتمكّن من تعديل مدخلاتك.
الأخطاء الشائعة في JSON وكيفية إصلاحها
فيما يلي الأخطاء الشائعة في ملفات JSON التي يمكن لهذا الأداة إصلاحها، مع أمثلة توضيحية لكل منها:
المفتاح الغير موضوع بين علامات اقتباس
يجب أن تكون المفاتيح محاطة بعلامتي اقتباس مزدوجتين.
{ name: "بوب" }
{ "name": "بوب" }
إصلاح: يضيف علامات اقتباس مزدوجة حول أي مفاتيح كائن غير مقتبسة.
تم استخدام الاقتباسات المفردة
صيغة JSON تقبل فقط علامات الاقتباس المزدوجة للنصوص.
{ 'role': 'مسؤول' }
{ "role": "مشرف" }
إصلاح: استبدال علامات الاقتباس المفردة بعلامات اقتباس مزدوجة لجميع النصوص.
الفواصل في نهاية السطور
لا يُسمح بوضع فاصلة بعد العنصر الأخير.
{ "a": 1, "b": 2, }
{ "a": 1, "b": 2 }
إصلاح: يزيل أي فواصل زائدة في النهاية.
أقواس غير متطابقة أو غير مغلقة
يجب إغلاق جميع الأقواس والأقواس المعقوفة بشكل صحيح.
[1, 2, 3
[1، 2، 3]
إصلاح: يضيف الأقواس أو الأقواس المعقوفة الناقصة.
فواصل مفقودة أو زائدة
يجب فصل عناصر المصفوفة والكائن بفاصلة واحدة فقط.
{ "أ": 1 "ب": 2 }
{ "a": 1, "b": 2 }
إصلاح: يُدرج الفواصل الناقصة أو يزيل التكرارات.
خطوط التعليقات موجودة
لا يسمح تنسيق JSON القياسي بإضافة تعليقات (مثل // أو /* ... */).
{ "id": 1, // معرف المستخدم "active": true }
{ "id": 1, "active": true }
الإصلاح: إزالة أسطر التعليقات من المدخلات.
صيغ أرقام غير صالحة
الأرقام العشرية العادية فقط هي الصالحة (بدون قيم غير رقمية، لا نهاية، أو أعداد سداسية عشرية).
{ "val": غير_رقم}
{ "val": null }
تصحيح: استبدال الأرقام غير الصالحة بالقيمة فارغة (null).
أحرف التحكم غير المهربة
يجب الهروب من الأحرف مثل الفواصل الجديدة في السلاسل النصية.
{ "msg": "السطر 1 السطر 2" }
{ "msg": "السطر 1\nالسطر 2" }
إصلاح: معالجة أحرف التحكم بشكل صحيح.
مفاتيح مكررة في الكائن
المفاتيح المكررة في نفس الكائن تسبب غموضاً.
{ "name": "أ"، "name": "ب" }
{ "name": "ب" }
تصحيح: يحتفظ بالقيمة الأخيرة فقط لأي مفتاح مكرر.
مصفوفات غير صحيحة التنسيق
يجب أن تحتوي المصفوفات على أقواس وفواصل بين العناصر.
[ ١ ٢ ٣ ]
[ 1، 2، 3 ]
إصلاح: إضافة الفواصل المفقودة بين عناصر المصفوفة.
مدخل فارغ أو يحتوي فقط على فراغات
لا يمكن أن يكون محتوى JSON فارغًا.
فارغ
الإصلاح: يُرجع قيمة فارغة عند إدخال بيانات فارغة.
مثال: من JSON تالفة إلى إصلاح صحيح
{ user: 'أليس', id: 42, roles: [admin, 'محرر',] // فاصلة زائدة active: true }الناتج المُصلح لـ JSON
{ "user": "أليس", "id": 42, "roles": [ "مسؤول", "محرر" ], "active": true }
كيف تستخدم أداة إصلاح JSON هذه
- قم بلصق أو كتابة نص JSON المعطّل الخاص بك في المحرر أدناه.
- انقر على "إصلاح" لاكتشاف وتصحيح الأخطاء الشائعة في الصياغة تلقائيًا.
- راجع الناتج المُصلح وقم بنسخ ملف JSON المُعدل الخاص بك.
تأكد دائمًا من مراجعة ملفات JSON التي تم إصلاحها قبل استخدامها للبيانات الحساسة — قد تحتاج إلى تعديلات يدوية للمدخلات المعقدة أو التالفة بشكل كبير.
أمثلة تعليمية لإصلاح JSON
اطلع على كيفية إصلاح JSON في لغات البرمجة المختلفة.
const { jsonrepair } = require('jsonrepair');
const broken = '{ name: "Bob", age: 42, }';
const fixed = jsonrepair(broken);
console.log(fixed); // Now valid JSON!
let broken = "{ name: 'Bob', age: 42 }";
broken = broken.replace(/(['"])?:([\s]*)([^\s,\{\}\[\]":']+)/g, '"$1$3":');
try {
let obj = JSON.parse(broken);
console.log(obj);
} catch (e) {
console.error('Still broken:', e.message);
}
import dirtyjson
broken = "{ name: 'Bob', age: 42 }"
obj = dirtyjson.loads(broken)
print(obj)
import demjson3
broken = "{ name: 'Bob', age: 42 }"
obj = demjson3.decode(broken)
print(obj)
package main
import (
"fmt"
"github.com/robertkrimen/otto"
)
func main() {
vm := otto.New()
broken := "{ name: 'Bob', age: 42 }"
value, err := vm.Run("(" + broken + ")")
if err != nil {
fmt.Println("Cannot repair:", err)
} else {
obj, _ := value.Export()
fmt.Println(obj)
}
}
import org.json.JSONObject;
public class Main {
public static void main(String[] args) {
String broken = "{'name': 'Bob', 'age': 42}".replace(''', '"');
JSONObject obj = new JSONObject(broken);
System.out.println(obj);
}
}
using System;
using Newtonsoft.Json;
class Program {
static void Main() {
var broken = "{ name: 'Bob', age: 42 }".Replace("'", "\"");
try {
var obj = JsonConvert.DeserializeObject(broken);
Console.WriteLine(obj);
} catch (Exception ex) {
Console.WriteLine("Broken JSON: " + ex.Message);
}
}
}
<?php
$broken = "{ name: 'Bob', age: 42 }";
$fixed = preg_replace("/'([^"]*)'/", '"$1"', $broken);
$fixed = preg_replace('/([a-zA-Z0-9_]+):/', '"$1":', $fixed);
$obj = json_decode($fixed);
var_dump($obj);
# Using system call to npx jsonrepair
require 'open3'
broken = "{ name: 'Bob', age: 42 }"
fixed, _ = Open3.capture2("echo #{broken.inspect} | npx jsonrepair")
puts fixed
echo "{ name: 'Bob', age: 42 }" | npx jsonrepair
// Rust does not have a json repair crate yet. Pre-process string with regex to fix simple cases, then use serde_json.
import org.json.JSONObject
fun main() {
var broken = "{ name: 'Bob', age: 42 }".replace("'", "\"")
broken = Regex("([a-zA-Z0-9_]+):").replace(broken, ""$1":")
val obj = JSONObject(broken)
println(obj)
}
import { jsonrepair } from 'jsonrepair';
const broken = '{ name: "Bob", age: 42 }';
const fixed = jsonrepair(broken);
console.log(fixed);
var broken = "{ name: 'Bob', age: 42 }";
var fixed = broken.replaceAll("'", '"').replaceAllMapped(
RegExp(r'([a-zA-Z0-9_]+):'),
(m) => '"${m[ 1 ]}":',
);
print(fixed);
broken = "{ name: 'Bob', age: 42 }"
fixed = Regex.replace(~r/'/, broken, """)
fixed = Regex.replace(~r/(\w+):/, fixed, ""\\1":")
IO.puts(fixed)