JavaScript에서 보기 좋은 JSON을 다시 읽기 쉽게 만들기

발행: (2026년 6월 12일 AM 12:19 GMT+9)
4 분 소요
원문: Dev.to

출처: Dev.to

Yair Lenga

대부분의 JSON 직렬화 도구는 두 가지 옵션만 제공합니다:

컴팩트한 기계 출력:

{"a":{"b":{"c":"abc"}},"x":{"y":{"z":"xyz"}}}

완전하게 확장된 “pretty‑print”:

{
  "a": {
    "b": {
      "c": "abc"
    }
  },
  "x": {
    "y": {
      "z": "xyz"
    }
  }
}

첫 번째는 사람이 스캔하기 어렵고, 두 번째는 실제 데이터가 중첩될 때 지나치게 장황해집니다.
나는 그 사이 어딘가를 원했습니다.

아이디어

jsonfold 라는 작은 JavaScript 모듈을 만들었습니다. JavaScript의 JSON 직렬화기를 대체하는 것이 아니라, JSON.stringify() 결과 위에 가벼운 후처리 필터로 동작합니다.

포매터는 선택적으로:

  • 작은 컨테이너를 한 줄에 다시 접음,
  • 짧은 스칼라 시퀀스를 압축,
  • 크거나 복잡한 구조는 펼쳐 둠

예시 출력:

{
  "a": { "b": { "c": "abc" } },
  "x": { "y": { "z": "xyz" } }
}

왜 이런 접근법인가?

직렬화기를 새로 만들고 싶지는 않았습니다. JavaScript는 JSON.stringify() 라는 훌륭한 직렬화기를 이미 제공하며, replacer 콜백을 통한 사용자 정의 변환과 들여쓰기 옵션을 지원합니다.

포매터는 스트리밍 필터로 사용하거나, JSON.stringify() 와 비슷하게 동작하는 편리한 래퍼를 통해 사용할 수 있습니다.

import { stringify } from "@jsonfold/core";

const data = {
  a: { b: { c: "abc" } },
  x: { y: { z: "xyz" } }
};

console.log(stringify(data));

즉, 더 컴팩트하고 가독성 좋은 출력을 만들면서도 표준 JavaScript 직렬화 파이프라인을 그대로 사용할 수 있다는 뜻입니다.

커스터마이징

포매터는 다음을 제어할 수 있습니다:

  • 최대 라인 길이,
  • 접기 깊이,
  • 압축 강도,
  • 배열/객체 제한

따라서 보수적인 포맷팅과 더 공격적인 압축 사이에서 선택할 수 있습니다.

전체 기사

Medium (유료벽 없음): A Streaming JSON Formatter for JavaScript that Works with JSON.stringify

최소 사용법

설치:

npm install @jsonfold/core
import { dump } from "@jsonfold/core";

const data = {
  meta: { version: 1, ok: true },
  ids: [1, 2, 3, 4, 5],
  items: [
    { id: 1, name: "alpha" },
    { id: 2, name: "beta" }
  ]
};

// compact 옵션: default, low, med, high, max
dump(data, process.stdout, {
  compact: "default"
});

GitHub 프로젝트

웹 사이트: https://jsonfold.dev/

저장소: https://github.com/yairlenga/jsonfold

JavaScript 구현은 javascript 디렉터리 아래에 있습니다.

앞으로 Python, Java, Perl, C 등 다른 구현에 대한 글도 다룰 예정이니 GitHub 프로젝트를 지켜보시거나 Medium의 글을 팔로우해 주세요.

0 조회
Back to Blog

관련 글

더 보기 »