JSON 복구

무료 온라인 JSON 복구 도구. 후행 쉼표, 작은따옴표, 따옴표 없는 키, 괄호 미폐쇄, 주석, Markdown 래퍼 등 일반적인 구문 오류를 자동 감지 및 복구합니다. AI 출력 정리와 손상된 JSON 복원을 위해 설계되었으며 모든 처리는 브라우저 로컬에서 이루어집니다.

관련 추천

JSON 복구(JSON Repair)란 무엇인가요?

JSON 복구(JSON Repair)는 구문 오류로 인해 엄격한 JSON 파서가 처리할 수 없는 비표준 JSON 텍스트를 RFC 8259를 준수하는 합법적인 JSON 문자열로 자동 복원하는 프로세스입니다. 'JSON 포맷터(Beautify)'와 달리 JSON 복구는 형식 차이가 아닌 구조적 오류를 처리합니다. 후행 쉼표, 작은따옴표, 따옴표 누락, 닫히지 않은 괄호, Markdown 래퍼, 주석 등은 모두 JSON.parse()가 SyntaxError를 직접 발생시키는 원인이지만 실제 개발에서는 매우 흔하게 발생합니다.

실제 엔지니어링 환경에서 JSON이 '비표준'이 되는 원인은 매우 집중되어 있습니다: ① ChatGPT / Claude / Gemini 등의 LLM에서 복사할 때 출력이 Markdown 코드 블록(```json ... ```)으로 감싸져 있거나 설명 텍스트가 포함되는 경우; ② JavaScript 객체의 console.log()에서 복사할 때 후행 쉼표와 작은따옴표가 포함될 수 있음; ③ 설정 파일에서 JSON5 / JSONC 확장 구문(주석, 따옴표 없는 키, 여러 줄 문자열 등)을 자주 사용; ④ 스트리밍 응답이나 로그 잘림으로 인해 JSON이 중간에 끊겨 끝의 `}` 또는 `"`가 누락됨. JSON 복구 도구는 입력 텍스트를 스캔하여 이러한 일반적인 문제를 식별하고 '최소 침해' 원칙에 따라 표준 JSON으로 복원하며 원본 데이터 의미를 최대한 보존합니다.

구현 수준에서 JSON 복구는 일반적으로 두 단계로 구성됩니다: ① 허용 파싱(tolerant parse) — 정규식이 아닌 상태 머신 기반 스캐너를 사용하여 문자 스트림을 단계별로 처리하고 '문자열 내부'와 '문자열 외부'의 구문 문자를 구분합니다; ② 정규화 출력(canonical output) — `JSON.parse` + `JSON.stringify`로 재생성하여 출력이 모든 다운스트림 엄격 파서에 대해 100% 합법적임을 보장합니다. GeekFormat의 JSON 복구 도구는 전체 복구 흐름을 브라우저 로컬에서 완료하며 원본 내용을 어떤 서버에도 전송하지 않으므로 민감한 API 응답, 내부 설정 파일, AI 모델 출력 처리에 적합합니다.

사용 사례

  • AI/LLM 출력 정리: ChatGPT/Claude가 반환하는 Markdown 래퍼, 설명 텍스트, 후행 쉼표가 포함된 JSON을 원클릭으로 표준 JSON으로 변환
  • API 디버깅 및 문제 해결: 게이트웨이나 네트워크 문제로 API 응답이 잘린 경우 괄호와 문자열을 빠르게 보완하여 원본 데이터 구조 파악
  • JavaScript에서 복사한 객체 리터럴: 작은따옴표, 후행 쉼표, 따옴표 없는 키 이름을 원스톱으로 수정
  • 설정 파일 정리: JSON5/JSONC의 주석을 제거하여 표준 JSON을 얻고 다운스트림 서비스에 통일된 연결 가능
  • 로그 및 클립보드 데이터 복구: 주석, 특수 공백, 잘림을 포함한 JSON 조각을 빠르게 표준화
  • 데이터 마이그레이션 및 스크립트 전처리: 데이터 마이그레이션 파이프라인에 복구 단계를 추가하여 소수의 잘못된 JSON이 전체 ETL 배치를 차단하는 것을 방지

이용 방법

  1. 오류가 있거나 Markdown 래퍼로 감싸졌거나 손상된 JSON 내용을 왼쪽 입력 상자에 붙여넣거나 '샘플'을 클릭하여 일반적인 손상된 JSON을 로드하거나 .json/.txt 파일을 업로드합니다
  2. 도구가 자동으로 일반적인 구문 문제를 감지 및 수정하고, 오른쪽 출력 영역에 포맷된 표준 JSON과 각 유형별 문제의 복구 횟수를 표시합니다
  3. 빨간색 오류 메시지가 남아 있으면 입력 영역에서 수동 편집 후 복구를 다시 트리거할 수 있습니다(Mac: ⌘+Shift+R, Windows: Ctrl+Shift+R)
  4. 구조가 올바른지 확인한 후 '복사'를 클릭하여 복구 결과를 클립보드에 넣거나 '다운로드'를 클릭하여 repaired.json으로 저장한 후 포맷, 검증 등의 후속 처리를 진행합니다

주요 기능

  • 7가지 일반적인 구문 오류 대응: 후행 쉼표, 작은따옴표, 따옴표 없는 키, 닫히지 않은 문자열, 주석, 괄호 누락, Markdown 코드 블록 래퍼
  • AI 출력 정리 최적화: ```json 래퍼와 코드 블록 외부의 설명 텍스트 자동 제거, ChatGPT, Claude, Gemini 등 LLM의 일반적인 출력 인식
  • JSON5/JSONC 호환: 주석, 느슨한 따옴표, 특수 공백(보이지 않는 Unicode 문자 등)을 포함한 확장 구문도 파싱 가능
  • 손상된 JSON 스마트 보완: API 응답 잘림, 복사 내용의 끝 괄호 누락 등을 처리하여 누락된 괄호와 따옴표를 자동 보완
  • 복구 문제 시각화: 각 유형별 문제가 복구된 횟수를 자동 집계 및 표시하여 감사와 수동 확인이 용이
  • 로컬 처리로 개인정보 보호: 파싱, 복구, 포맷이 모두 브라우저 내에서 이루어지며 입력 내용이 어떤 서버에도 전송되지 않음
  • 포맷터와 원활한 연계: 복구된 표준 JSON을 원클릭으로 JSON 포맷터, Schema 검증, 코드 생성 등 후속 처리로 진행 가능
  • 파일 및 샘플 로딩: .json/.txt 파일 업로드 또는 샘플 로딩 클릭을 지원하여 복구 효과를 빠르게 검증 가능

코드 예제

jsonrepair JavaScript 라이브러리를 사용한 프로그래밍 방식 복구

javascript
// npm install jsonrepair
import { jsonrepair } from 'jsonrepair';

const broken = `{
  name: 'Alice',
  age: 30,
  tags: ['dev', 'writer',], // trailing comma + comment
}`;

try {
  const fixed = jsonrepair(broken);
  const obj = JSON.parse(fixed);
  console.log(obj);
  // => { name: 'Alice', age: 30, tags: ['dev', 'writer'] }
} catch (err) {
  console.error('Still unrepairable:', err.message);
}

jsonrepair Python 라이브러리를 사용한 프로그래밍 방식 복구

python
# pip install jsonrepair
from jsonrepair import jsonrepair
import json

broken = '''{
  name: "Alice",
  age: 30,
  tags: ["dev", "writer",], // trailing comma + comment
}'''

fixed = jsonrepair(broken)
obj = json.loads(fixed)
print(obj)
# => {'name': 'Alice', 'age': 30, 'tags': ['dev', 'writer']}

jq + sed를 사용한 간단한 후행 쉼표 수정(응급 처치용)

bash
# 객체/배열의 후행 쉼표 제거(응급 처치. 주석/작은따옴표 미지원)
# 복잡한 시나리오에서는 jsonrepair 등의 전용 라이브러리를 사용하세요
sed -E 's/,([ \t]*[}\]])/\1/g' broken.json > clean.json

# 복구 결과 검증
jq . clean.json >/dev/null && echo 'JSON is valid'

자주 묻는 질문

JSON 복구와 JSON 포맷터의 차이점은 무엇인가요?

JSON 포맷터는 내용 자체가 합법적이고 들여쓰기나 공백만 일치하지 않는 JSON을 재정렬할 뿐입니다. 반면 JSON 복구는 구문 오류가 있는 JSON을 전문적으로 처리하여 후행 쉼표, 작은따옴표, 주석, 괄호 누락 등의 구조적 문제를 먼저 수정한 다음 표준 형식을 출력합니다. 포맷터 도구가 SyntaxError를 발생시키면 먼저 JSON 복구를 사용해야 합니다.

도구는 어떤 일반적인 JSON 구문 오류를 복구할 수 있나요?

도구에는 지능형 복구 알고리즘이 내장되어 있어 다음과 같은 빈번한 문제를 처리할 수 있습니다: 1) 후행 쉼표(Trailing comma); 2) 큰따옴표 대신 작은따옴표; 3) 따옴표 없는 키 이름; 4) 닫히지 않은 문자열; 5) JavaScript 라인/블록 주석 포함; 6) Markdown 코드 블록으로 감싸진 JSON; 7) 잘린 끝으로 인한 중괄호/대괄호 누락.

AI나 LLM이 출력하는 JSON이 표준적이지 않은 경우가 많은 이유는 무엇인가요?

대규모 언어 모델(ChatGPT, Claude, Gemini 등)이 생성하는 JSON에는 Markdown 래퍼(```json ... ```), 설명적인 앞/뒤 텍스트, 후행 쉼표, 주석, 또는 토큰 잘림으로 인한 불완전한 구조가 자주 포함됩니다. JSON 복구는 이러한 시나리오에 최적화되어 AI 출력을 원클릭으로 합법적인 JSON으로 정리합니다.

복구된 JSON이 구조적으로 항상 원본 데이터와 일치하나요?

복구된 출력은 JSON 표준을 준수하는 합법적인 문자열이며, 데이터 의미는 대부분의 경우 보존됩니다. 그러나 복구는 휴리스틱 규칙을 기반으로 하므로 극도로 손상되거나 모호한 시나리오(예: 동일 행에 여러 개의 쉼표 누락)에서는 원래 의도와 약간 다를 수 있습니다. 중요한 데이터의 경우 Schema 검증이나 수동 확인을 권장합니다.

Python의 json.loads나 JavaScript의 JSON.parse를 직접 사용하면 안 되나요?

네이티브 파서는 SyntaxError 발생 시 오류만 반환할 뿐 복구할 수 없습니다. JSON 복구는 네이티브 파서 앞에 위치하는 허용 계층으로, 먼저 텍스트 복구를 시도한 다음 네이티브 파서에 전달하여 최종 출력이 엄격한 JSON 파서에서 처리 가능하도록 보장합니다. 프로덕션 환경에서도 서버 측에서 동일한 방식으로 전처리할 수 있습니다.

JSON5 / JSONC의 주석은 보존되나요?

아니요. 주석은 JSON5 확장 구문의 일부이며 표준 JSON에는 포함되지 않으므로, 도구는 표준 JSON 준수를 보장하기 위해 주석을 제거합니다. 주석을 유지하려면 JSON5 소스 파일이나 JSONC 도구 체인을 계속 사용하세요. JSON5를 표준 JSON으로 변환해야 하는 경우 이 도구로 직접 변환할 수 있습니다.

잘린 JSON(스트리밍 출력이 중간에 끊긴 경우 등)을 복구할 수 있나요?

가능합니다. 도구는 누락된 오른쪽 괄호, 대괄호, 문자열 종료 따옴표의 매칭을 시도하고 인식된 내용을 최대한 보존합니다. 참고: 잘린 위치가 문자열 리터럴 내부에 있는 경우 주요 문자를 수동으로 보완해야 할 수 있습니다.

복구 후 데이터가 손실될 수 있나요?

일반적인 복구 시나리오(후행 쉼표 제거, 따옴표 추가, 괄호 보완, 주석 제거)에서 데이터 의미는 완전히 보존됩니다. 매우 드물게 원본 내용에 비가역적인 모호성이 있는 경우(예: 중첩 레벨이 파괴된 경우), 도구는 가능한 한 보수적으로 복구하고 원본 상태를 유지합니다. 필드나 키를 능동적으로 삭제하지 않습니다.

여러 JSON을 일괄 복구할 수 있나요?

이 도구는 단일 입력당 복구를 지원합니다. 일괄 처리 시나리오에서는 먼저 로컬에서 스크립트(Python의 jsonrepair 라이브러리, josdejong/jsonrepair npm 패키지 등)를 사용하여 기본 알고리즘을 호출한 다음 결과를 이 도구로 가져와 수동 검증과 포맷을 진행하는 것을 권장합니다.

복구 후에도 포맷과 Schema 검증을 추가로 수행해야 하나요?

권장합니다. 복구는 주로 구문 수준의 오류를 해결하며, 포맷과 Schema 검증은 가독성과 비즈니스 정확성을 보장합니다. 복구 도구의 출력은 GeekFormat의 JSON 포맷터, Schema 검증, 코드 생성 등의 도구와 원활하게 연계됩니다.

도구가 내 JSON을 서버에 업로드하나요?

아니요. 모든 파싱, 복구, 포맷은 브라우저 로컬에서 이루어지며 입력과 중간 결과 모두 어떤 서버에도 전송되지 않습니다. 오프라인에서 사용 가능하며 민감한 정보(프로덕션 환경 API 응답, 내부 설정 등)가 포함된 JSON 처리에 적합합니다.

매번 사용하는 복구 전략을 고정할 수 있나요?

이 도구는 성공률을 극대화하기 위해 기본적으로 모든 일반적인 복구 규칙을 활성화합니다. 특정 언어/팀의 규칙에 맞춰 세밀하게 제어해야 하는 경우, 프로덕션 환경에서 jsonrepair 라이브러리를 사용하여 필요에 따라 특정 규칙을 활성화/비활성화할 수 있습니다. 이 도구의 출력은 후속 검증을 위한 표준화된 입력으로도 사용할 수 있습니다.

문제 해결

'이 JSON을 복구할 수 없습니다' 오류

원인: 입력 텍스트에 심각한 구조적 손상이 있습니다(여러 괄호 누락, 문자열 리터럴 잘림, 문자 세트 손상 등). 해결 방법: 먼저 일반 텍스트 편집기로 원본 파일을 열어 인코딩이 BOM 없는 UTF-8이며 압축 바이너리가 아닌지 확인하세요. 데이터가 API 응답에서 온 경우 업스트림에 보완을 요청하세요. 극도로 손상된 데이터 세트는 원본 파일을 직접 사용하세요.

복구 후 필드가 잘못된 위치로 이동됨

원인: 원본 텍스트의 주석이나 문자열 리터럴 내에 JSON 구문 문자(//, /*, } 등)가 포함되어 파서가 오판했거나, 중첩 레벨이 너무 깊어 괄호 매칭이 틀어졌을 수 있습니다. 해결 방법: 문자열 내의 //, /*를 수동으로 백슬래시 이스케이프하세요. 깊게 중첩된 데이터는 외부에 임시 괄호나 줄바꿈을 추가한 후 복구하세요.

AI 출력에 포함된 설명 텍스트가 제거되지 않음

원인: AI 출력은 자연어로 시작/종료되는 경우가 많으며(예: '결과는 다음과 같습니다:') 여러 줄에 걸칠 수 있습니다. 해결 방법: 텍스트 편집기로 JSON 블록 외부의 텍스트를 삭제하고 가장 바깥쪽 ```json 래퍼 내의 내용만 유지하세요. 도구가 여전히 인식하지 못하면 수동으로 가장 바깥쪽 { }를 추가한 후 복구하세요.

복구 후 크기가 변하지 않거나 일부 문자가 대체됨

원인: 원본에 백슬래시, 유니코드 이스케이프 또는 HTML 엔티티가 포함되어 도구가 JSON 규칙에 따라 다시 이스케이프했습니다. 해결 방법: 원본이 JS 문자열 내에 중첩되어 있는지 확인하세요. HTML 페이지에 있는 경우 먼저 HTML 디코딩하세요. 이스케이프 후 문자가 늘어나는 것은 정상입니다.

브라우저에서 '메모리 부족'이 표시되거나 페이지가 멈춤

원인: 단일 입력이 5~10MB를 초과하면 브라우저에 상당한 메모리 부하가 발생합니다. 해결 방법: 데이터를 여러 개의 작은 배치(각 1~2MB)로 분할하거나 서버 측에서 jsonrepair 라이브러리를 사용하여 스트리밍 처리하세요. 복구 결과와 원본의 미세한 차이는 정상입니다.

복구 후에도 Schema 검증에서 오류가 보고됨

원인: JSON 복구는 구문 수준의 오류만 해결하며 비즈니스 필드 이름, 유형, 값이 Schema를 준수하는지는 관여하지 않습니다. 해결 방법: GeekFormat의 JSON Schema 검증 도구를 사용하여 필드 제약 조건을 확인하고 오류에 따라 특정 필드를 찾아 수동으로 수정하세요.

용어집

JSON
JavaScript Object Notation. RFC 8259에 정의된 키-값 기반의 경량 데이터 교환 형식. REST API, 설정 파일, 로그의 사실상 표준.
RFC 8259
IETF에서 발행한 JSON 공식 사양. 합법적인 JSON의 엄격한 구문을 정의하며, 모든 키는 큰따옴표로 감싸야 하고 문자열 내에서 이스케이프가 필요한 문자는 제한적이며 주석과 후행 쉼표는 허용되지 않음.
JSON.parse
JavaScript / 최신 브라우저에 내장된 엄격한 JSON 파서. RFC 8259를 준수하며 구문 오류 발생 시 직접 SyntaxError를 발생시키고 허용 복구는 불가능.
JSON5
JSON의 확장 구문(비표준). 따옴표 없는 키, 작은따옴표 문자열, 주석(// 및 /* */), 후행 쉼표, 16진수 숫자 등을 허용. 사람이 직접 작성하기에는 적합하지만 JSON.parse와 호환되지 않음.
JSONC
JSON with Comments. VS Code와 같은 편집기에서 주석이 있는 JSON 설정 파일(tsconfig.json 등)을 지칭하는 통칭. 실질적으로 JSON5의 일반적인 별칭.
Trailing Comma / 후행 쉼표
객체나 배열의 마지막 요소 뒤에 있는 불필요한 쉼표. JavaScript에서는 허용되지만 JSON 표준에서는 금지됨. LLM 출력 및 console.log() 복사 시 가장 흔한 구문 오류.
Markdown 코드 블록
세 개의 백틱(```)으로 감싸진 코드 스니펫. LLM이 JSON을 출력할 때 자동으로 ```json ... ```으로 감싸는 경우가 많아 그대로 JSON.parse()에 붙여넣으면 실패함.
Tolerant Parser / 허용 파서
구문 오류 발생 시 복구를 시도하고 파싱을 계속할 수 있는 파서. JSON 복구 도구의 핵심 엔진으로 엄격한 JSON.parse와 구별됨.
SyntaxError
JavaScript가 발생시키는 구문 오류 예외. 엄격한 JSON 파서는 RFC 8259를 준수하지 않는 입력을 받으면 항상 이 오류를 발생시킴.
Canonical JSON / 정규화 JSON
parse + stringify로 재생성된 JSON. 키 순서가 안정적이고 불필요한 공백이 없으며 표준 파서와 100% 호환됨. JSON 복구 도구의 최종 출력 형식.

JSON 복구 일반적인 오류 유형과 예시

오류 카테고리복구 전복구 후복구 방법
후행 쉼표{ "a": 1, }{ "a": 1 }마지막 요소 뒤의 쉼표 제거
작은따옴표{ 'a': 1 }{ "a": 1 }모든 작은따옴표를 큰따옴표로 변환
따옴표 없는 키{ a: 1 }{ "a": 1 }키 이름에 큰따옴표 추가
라인 주석{ // 주석 "a": 1 }{ "a": 1 }// 전체 라인 주석 제거
블록 주석{ /* 블록 */ "a": 1 }{ "a": 1 }/* */ 블록 주석 제거
Markdown 래퍼```json { "a": 1 } ```{ "a": 1 }```json과 ``` 래퍼 제거
문자열 미폐쇄{ "a": "hello }{ "a": "hello" }누락된 문자열 종료 따옴표 보완
괄호 누락{ "a": 1{ "a": 1 }스택 매칭으로 오른쪽 중괄호/대괄호 보완

JSON 복구 vs JSON 포맷터 vs JSON Schema 검증

도구해결하는 문제입력 요구사항실패 모드
JSON 복구구문 오류가 있는 JSON을 합법적인 JSON으로 변환허용적, 비표준 JSON 수용구조 추측이 불가능할 정도로 손상된 경우 오류
JSON 포맷터합법적인 JSON 재정렬이미 합법적인 JSON이어야 함SyntaxError 직접 발생
JSON 압축공백 제거, 크기 축소이미 합법적인 JSON이어야 함SyntaxError 직접 발생
JSON Schema 검증필드 유형/값이 비즈니스 제약을 준수하는지 확인이미 합법적인 JSON이어야 함각 필드의 위반 규칙 나열
JSON Merge / Sort다중 소스 병합 / 키 정렬이미 합법적인 JSON이어야 함SyntaxError 직접 발생

Authoritative References