Інструмент для виправлення 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]
Виправлення: Додає відсутні закриваючі дужки або фігурні дужки.
Відсутні або зайві коми
Елементи масиву та об’єкта мають бути розділені одним комою.
{ "a": 1 "b": 2 }
{ "a": 1, "b": 2 }
Виправлення: додає пропущені коми або видаляє дублікати.
Наявні коментарі в рядках
Стандартний JSON не дозволяє коментарі (наприклад, // або /* ... */).
{ "id": 1, // ID користувача "active": true }
{ "id": 1, "active": true }
Виправлення: Видаляє рядки з коментарями з введених даних.
Неправильні формати номерів
Дійсними є лише звичайні десяткові числа (без NaN, нескінченності чи шістнадцяткових чисел).
{ "val": NaN }
{ "val": null }
Виправлення: Заміна некоректних чисел на null.
Некеровані керуючі символи
Символи, як-от перенос рядка у рядках, повинні бути екрановані.
{ "msg": "Рядок1 Рядок2" }
{ "msg": "Рядок1\nРядок2" }
Виправлено: правильне екранування керуючих символів.
Дублікати ключів в об'єкті
Подвійні ключі в одному об'єкті спричиняють неоднозначність.
{ "name": "А", "name": "Б" }
{ "name": "Б" }
Виправлення: Залишає лише останнє значення для будь-якого дубльованого ключа.
Неправильні масиви
Масиви повинні містити дужки та кому між елементами.
[ 1 2 3 ]
[ 1, 2, 3 ]
Виправлення: Додає пропущені коми між елементами масиву.
Порожній ввід або тільки пропуски
JSON не може бути порожнім.
null
Виправлення: Повертає null для порожнього вводу.
Приклад: Від пошкодженого JSON до правильної відновленої версії
{ user: 'alice', id: 42, roles: [адмін, 'редактор',] // зайва кома 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)