화면에 보이는 줄과 문자열 값의 줄은 다릅니다
JSON 원문에서 문자열 안의 백슬래시와 n은 줄바꿈을 나타내는 이스케이프입니다. 백슬래시를 두 번 쓰면 값에는 백슬래시와 n 두 문자가 남습니다. 아래 두 JSON은 모두 유효하지만 파싱한 text 값의 길이는 각각 3과 4입니다.
{"text":"A\nB"}
{"text":"A\\nB"}
JSON.parse('{"text":"A\\nB"}').text.length // 3
JSON.parse('{"text":"A\\\\nB"}').text.length // 4실제 줄바꿈을 문자열 안에 넣으면 오류입니다
RFC 8259의 문자열 문법은 U+0000~U+001F 제어 문자를 이스케이프하도록 요구합니다. 문자열 안의 실제 LF는 이 조건에 해당합니다. 반면 토큰 사이에는 LF·CR·탭·공백을 넣을 수 있습니다. 예제에서 문자열 안의 실제 LF는 거부되고, 객체를 여러 줄로 배치한 입력은 통과했습니다.
const invalid = '{"text":"A' + '\n' + 'B"}';
formatJSON(invalid); // throws
formatJSON('{\n"text":"AB"\n}'); // acceptedMoyoutil에서 원문과 해석을 구분하기
JSON 정리는 원문 문자열 토큰을 유지하며 바깥 들여쓰기를 바꿉니다. \n을 화면상의 실제 줄바꿈으로 풀어 표시하는 도구가 아닙니다. 압축도 문자열 안의 이스케이프를 제거하지 않습니다. 입력에 실패하면 오류 위치 주변의 큰따옴표와 백슬래시를 먼저 확인하세요. 전체 입력에 백슬래시를 일괄 추가하면 이미 올바른 값을 바꿀 수 있습니다.
예제를 넣고 정리·검증을 실행한 뒤 압축 결과도 비교하세요. 문자열 안의 줄바꿈이 필요한 경우 JSON 생성 단계에서 문자열을 JSON.stringify로 직렬화하고, 다시 JSON.parse한 값이 의도와 같은지 확인하세요. JSON 문법 통과는 특정 API 스키마의 필수 필드 검증을 뜻하지 않습니다.
자주 묻는 질문
JSON 압축을 하면 값의 줄바꿈도 사라지나요?
아닙니다. 압축은 문자열 바깥의 공백을 줄입니다. 이 도구는 문자열 안의 이스케이프를 유지하므로 파싱한 값의 줄바꿈도 유지됩니다.