Skip to content

formatJson

JSON을 보기 좋게 다듬습니다. 객체도 되고, 다시 다듬고 싶은 JSON 문자열도 됩니다.

API

formatJson(value, onError?, indent?)

매개변수설명타입기본값
value객체, 또는 JSON 문자열(작은따옴표도 봐줍니다)string | object필수
onError파싱이나 직렬화 오류를 받아 불립니다(e: Error) => void아무것도 안 함
indent단계마다 넣을 공백 수number4

다듬은 문자열을 반환하며, 입력을 파싱할 수 없으면 ''를 반환합니다.

예시

js
import { formatJson } from 'ranuts';

formatJson({ a: 1, b: [2, 3] });
formatJson("{'a': 1}"); // 작은따옴표도 봐줍니다
formatJson({ a: 1 }, undefined, 2); // 공백 두 칸 들여쓰기
formatJson('nope', (e) => console.warn(e)); // ''를 반환하고 오류는 콜백으로

참고

  1. 문자열을 넣으면 그대로 돌려주지 않고 다시 파싱합니다. 그래야 값이 올바른지 확인되고, 부른 쪽의 공백 습관에 기대지 않고 모양이 고르게 잡힙니다.
  2. 오류는 알려 줄 뿐 던지지 않습니다. 잘못된 JSON, 순환 구조, JSON.stringify가 표현하지 못하는 값은 모두 ''를 반환하고 onError를 부릅니다.

0.3에서 다시 썼습니다

예전에는 90줄 남짓의 손수 만든 포매터였습니다. 중괄호와 대괄호, 쉼표마다 정규식으로 줄바꿈을 끼워 넣어 모양을 다시 짜고, 그다음 줄마다 따옴표를 세어 문자열 안에서 생긴 피해를 되돌리려 했지요. 이스케이프된 따옴표를 제대로 다루지 못했고 문자열 값 안의 중괄호나 쉼표까지 구조로 여겼기 때문에 { css: 'a { color: red, }' }는 망가진 채로 나왔습니다. 지금은 앞단에 너그러운 파싱을 둔 JSON.stringify입니다. 올바르고 훨씬 빠릅니다. 출력의 공백은 예전의 자체 모양이 아니라 JSON.stringify를 따릅니다.

MIT 라이선스로 배포됩니다.