JSON 복구 도구

손상되거나 잘못된 JSON을 자동으로 복구 및 수정하세요—안전하고 빠르며 무료로 제공합니다.

이 도구는 자동 오류 수정을 통해 깨진 JSON 또는 잘못된 JSON을 복구합니다. 내보낸 데이터, 로그 또는 수동 편집 파일에서 흔히 발생하는 따옴표 누락, 불필요한 쉼표, 괄호 불일치 등 자주 발생하는 구문 오류를 대상으로 하며, 유효하고 파싱 가능한 JSON을 출력합니다.

아래 JSON을 수정하세요

JSON 복구 작동 원리

이 도구는 입력한 내용을 일반적인 JSON 문법 문제에 대해 검사하고, 문제를 해결하여 가능한 경우 유효한 JSON을 생성합니다.

  1. 입력을 분석하여 잘못된 문자, 잘못된 괄호 위치, 부정확한 문자열 따옴표 등 일반적인 문법 오류를 찾아냅니다.
  2. 누락된 따옴표 추가, 끝에 불필요한 쉼표 제거, 괄호 수정 등 자주 발생하는 오류를 자동으로 수정합니다.
  3. 수정된 JSON을 출력합니다. 대부분의 경우, 결과는 즉시 파싱하거나 사용할 준비가 되어 있습니다.
  4. 구조를 자동으로 복구할 수 없는 경우, 명확한 오류 메시지가 표시되어 입력을 조정할 수 있습니다.

자주 발생하는 JSON 오류 및 해결 방법

이 도구가 수리할 수 있는 일반적인 JSON 오류와 각 오류에 대한 예시는 다음과 같습니다:

따옴표 없는 키

키는 반드시 큰따옴표로 감싸야 합니다.

Before:
{ 이름: "밥" }
After:
{ "name": "밥" }

수정: 따옴표가 없는 객체 키에 모두 큰따옴표를 추가합니다.

홑따옴표 사용됨

JSON은 문자열에 대해 반드시 큰따옴표(")만 사용해야 합니다.

Before:
{ '역할': '관리자' }
After:
{ "role": "관리자" }

수정: 모든 문자열에서 작은따옴표를 큰따옴표로 변경합니다.

후행 쉼표

마지막 항목 뒤에는 쉼표를 사용할 수 없습니다.

Before:
{ "a": 1, "b": 2, }
After:
{ "a": 1, "b": 2 }

수정: 끝에 있는 쉼표를 모두 제거합니다.

일치하지 않거나 닫히지 않은 괄호

모든 괄호와 중괄호는 올바르게 닫혀야 합니다.

Before:
[1, 2, 3
After:
[1, 2, 3]

수정: 누락된 닫는 괄호 또는 중괄호를 추가합니다.

누락되거나 과도한 쉼표

배열 및 객체 항목은 쉼표 한 개로만 구분해야 합니다.

Before:
{ "a": 1 "b": 2 }
After:
{ "a": 1, "b": 2 }

수정: 누락된 쉼표를 삽입하거나 중복된 쉼표를 제거합니다.

주석 줄 존재

표준 JSON은 주석(예: // 또는 /* ... */)을 허용하지 않습니다.

Before:
{ "id": 1, // 사용자 ID
 "active": true }
After:
{ "id": 1, "active": true }

수정: 입력에서 주석 행을 제거합니다.

잘못된 숫자 형식

유효한 입력은 순수한 10진수 숫자만 가능합니다(숫자가 아님, 무한대, 16진수 포함 불가).

Before:
{ "val": NaN }
After:
{ "val": null }

수정: 잘못된 숫자를 null로 대체합니다.

이스케이프되지 않은 제어 문자

문자열의 줄바꿈 문자와 같은 특수 문자는 반드시 이스케이프 처리해야 합니다.

Before:
{ "msg": "첫 번째 줄
두 번째 줄" }
After:
{ "msg": "첫째줄\n둘째줄" }

수정: 제어 문자를 올바르게 이스케이프 처리합니다.

객체 내 중복 키

같은 객체 내 중복 키는 모호성을 초래합니다.

Before:
{ "name": "A", "name": "B" }
After:
{ "name": "비" }

수정: 중복된 키가 있을 경우 마지막 값만 유지합니다.

잘못된 배열

배열에는 항목 사이에 대괄호와 쉼표가 있어야 합니다.

Before:
[ 1 2 3 ]
After:
[ 1, 2, 3 ]

수정: 배열 요소 사이에 누락된 쉼표를 추가했습니다.

빈 입력 또는 모든 공백

JSON은 비워둘 수 없습니다.

Before:
After:

수정: 빈 입력에 대해 null을 반환합니다.

예시: 깨진 JSON에서 유효한 복구로

잘못된 JSON 입력
{ user: '앨리스', id: 42, roles: [관리자, '에디터',] // 추가 쉼표
 active: true }
수정된 JSON 출력
{
  "user": "앨리스",
  "id": 42,
  "roles": [
    "관리자",
    "편집자"
  ],
  "active": true
}

이 JSON 복구 도구 사용 방법

  1. 아래 편집기에 깨진 JSON을 붙여넣거나 입력하세요.
  2. '수리'를 클릭하여 일반적인 구문 오류를 자동으로 감지하고 수정하세요.
  3. 수정된 JSON을 검토하고 복사하세요.

중요한 데이터에 사용하기 전에 항상 복구된 JSON을 확인하세요—복잡하거나 심하게 손상된 입력의 경우 수동 조정이 필요할 수 있습니다.

JSON 복구를 위한 코드 예제

다양한 프로그래밍 언어에서 JSON을 수리하는 방법을 알아보세요.

JavaScript (Node.js) with jsonrepair
Install: npm install jsonrepair
const { jsonrepair } = require('jsonrepair');
const broken = '{ name: "Bob", age: 42, }';
const fixed = jsonrepair(broken);
console.log(fixed); // Now valid JSON!
JavaScript (Node.js) simple fix (not for production)
Install: Standard library
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);
}
Python with dirtyjson
Install: pip install dirtyjson
import dirtyjson
broken = "{ name: 'Bob', age: 42 }"
obj = dirtyjson.loads(broken)
print(obj)
Python with demjson3
Install: pip install demjson3
import demjson3
broken = "{ name: 'Bob', age: 42 }"
obj = demjson3.decode(broken)
print(obj)
Go (using otto for JS-like object parsing)
Install: go get github.com/robertkrimen/otto
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)
  }
}
Java with org.json (manual fix for single quotes)
Install: org.json:json
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);
  }
}
C# with Newtonsoft.Json (try-catch, manual fix)
Install: Newtonsoft.Json
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 (manual fix for single quotes/unquoted keys)
Install: Standard library
<?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);
Ruby with json-repair (via gem or shell call)
Install: gem install json-repair or use npx jsonrepair
# Using system call to npx jsonrepair
require 'open3'
broken = "{ name: 'Bob', age: 42 }"
fixed, _ = Open3.capture2("echo #{broken.inspect} | npx jsonrepair")
puts fixed
Bash (npx jsonrepair CLI)
Install: npm install -g jsonrepair
echo "{ name: 'Bob', age: 42 }" | npx jsonrepair
Rust (suggest manual pre-processing)
Install: Standard libraries
// Rust does not have a json repair crate yet. Pre-process string with regex to fix simple cases, then use serde_json.
Kotlin (manual fix, like Java)
Install: org.json: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)
}
TypeScript (Node.js) with jsonrepair
Install: npm install jsonrepair
import { jsonrepair } from 'jsonrepair';
const broken = '{ name: "Bob", age: 42 }';
const fixed = jsonrepair(broken);
console.log(fixed);
Dart (manual string fixes)
Install: Standard library
var broken = "{ name: 'Bob', age: 42 }";
var fixed = broken.replaceAll("'", '"').replaceAllMapped(
  RegExp(r'([a-zA-Z0-9_]+):'),
  (m) => '"${m[ 1 ]}":',
);
print(fixed);
Elixir (manual fix with Regex)
Install: Standard library
broken = "{ name: 'Bob', age: 42 }"
fixed = Regex.replace(~r/'/, broken, """)
fixed = Regex.replace(~r/(\w+):/, fixed, ""\\1":")
IO.puts(fixed)