JSON 복구 도구
손상되거나 잘못된 JSON을 자동으로 복구 및 수정하세요—안전하고 빠르며 무료로 제공합니다.
이 도구는 자동 오류 수정을 통해 깨진 JSON 또는 잘못된 JSON을 복구합니다. 내보낸 데이터, 로그 또는 수동 편집 파일에서 흔히 발생하는 따옴표 누락, 불필요한 쉼표, 괄호 불일치 등 자주 발생하는 구문 오류를 대상으로 하며, 유효하고 파싱 가능한 JSON을 출력합니다.
아래 JSON을 수정하세요
JSON 복구 작동 원리
이 도구는 입력한 내용을 일반적인 JSON 문법 문제에 대해 검사하고, 문제를 해결하여 가능한 경우 유효한 JSON을 생성합니다.
- 입력을 분석하여 잘못된 문자, 잘못된 괄호 위치, 부정확한 문자열 따옴표 등 일반적인 문법 오류를 찾아냅니다.
- 누락된 따옴표 추가, 끝에 불필요한 쉼표 제거, 괄호 수정 등 자주 발생하는 오류를 자동으로 수정합니다.
- 수정된 JSON을 출력합니다. 대부분의 경우, 결과는 즉시 파싱하거나 사용할 준비가 되어 있습니다.
- 구조를 자동으로 복구할 수 없는 경우, 명확한 오류 메시지가 표시되어 입력을 조정할 수 있습니다.
자주 발생하는 JSON 오류 및 해결 방법
이 도구가 수리할 수 있는 일반적인 JSON 오류와 각 오류에 대한 예시는 다음과 같습니다:
따옴표 없는 키
키는 반드시 큰따옴표로 감싸야 합니다.
{ 이름: "밥" }
{ "name": "밥" }
수정: 따옴표가 없는 객체 키에 모두 큰따옴표를 추가합니다.
홑따옴표 사용됨
JSON은 문자열에 대해 반드시 큰따옴표(")만 사용해야 합니다.
{ '역할': '관리자' }
{ "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 }
수정: 입력에서 주석 행을 제거합니다.
잘못된 숫자 형식
유효한 입력은 순수한 10진수 숫자만 가능합니다(숫자가 아님, 무한대, 16진수 포함 불가).
{ "val": NaN }
{ "val": null }
수정: 잘못된 숫자를 null로 대체합니다.
이스케이프되지 않은 제어 문자
문자열의 줄바꿈 문자와 같은 특수 문자는 반드시 이스케이프 처리해야 합니다.
{ "msg": "첫 번째 줄 두 번째 줄" }
{ "msg": "첫째줄\n둘째줄" }
수정: 제어 문자를 올바르게 이스케이프 처리합니다.
객체 내 중복 키
같은 객체 내 중복 키는 모호성을 초래합니다.
{ "name": "A", "name": "B" }
{ "name": "비" }
수정: 중복된 키가 있을 경우 마지막 값만 유지합니다.
잘못된 배열
배열에는 항목 사이에 대괄호와 쉼표가 있어야 합니다.
[ 1 2 3 ]
[ 1, 2, 3 ]
수정: 배열 요소 사이에 누락된 쉼표를 추가했습니다.
빈 입력 또는 모든 공백
JSON은 비워둘 수 없습니다.
널
수정: 빈 입력에 대해 null을 반환합니다.
예시: 깨진 JSON에서 유효한 복구로
{ user: '앨리스', 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)