TL;DR
- JSON 값(value) 은 JSON 문법에서 허용하는 최상위 데이터 단위이며, 객체·배열·문자열·숫자·
true·false·null을 모두 포함한다.- JSON 객체(object) 는 중괄호(
{}) 안에 이름/값 쌍을 담는 구조화 타입으로, JSON 값의 한 종류일 뿐이다.
JSON 값과 JSON 객체의 차이
1. 정의
RFC 8259 기준으로 JSON 텍스트는 하나의 직렬화된 JSON 값이다. 즉 JSON 문서의 최상위에는 반드시 객체만 올 수 있는 것이 아니라, JSON 문법이 허용하는 값 하나가 올 수 있다.
| 구분 | 의미 | 예시 |
|---|---|---|
| JSON 값 | JSON 문법에서 허용하는 단일 데이터 단위 | {"id": 1}, [1, 2], "hello", 123, true, false, null |
| JSON 객체 | 이름/값 쌍을 담는 구조화 타입 | {"id": 1, "name": "Alice"} |
따라서 모든 JSON 객체는 JSON 값이지만, 모든 JSON 값이 JSON 객체인 것은 아니다.
2. JSON 값의 종류
JSON 값은 다음 일곱 범주 중 하나다.
JSON value
├─ object: { "name": "kim" }
├─ array: [1, 2, 3]
├─ string: "hello"
├─ number: 123
├─ true
├─ false
└─ null객체는 이 중 하나의 타입이다. 객체의 각 멤버는 문자열 이름과 JSON 값으로 구성되므로, 객체 안의 값도 다시 객체·배열·문자열·숫자·true·false·null이 될 수 있다.
{
"id": 1,
"name": "Alice",
"tags": ["admin", "beta"],
"active": true,
"meta": null
}3. 최상위 JSON 값 예시
아래 항목들은 각각 독립된 JSON 텍스트로 보면 모두 유효한 JSON 값이다.
{"id": 1, "name": "Alice"}
[1, 2, 3]
"hello"
123
true
false
null첫 번째만 JSON 객체다. 나머지는 객체가 아니지만, 여전히 유효한 JSON 값이다.
4. NDJSON에서의 의미
NDJSON (Newline Delimited JSON)은 각 줄에 하나의 JSON 텍스트를 쓰고 줄바꿈으로 구분하는 포맷이다. RFC 8259에서 JSON 텍스트는 직렬화된 JSON 값이므로, 엄밀히 말하면 NDJSON의 각 행은 JSON 객체가 아니라 유효한 단일 JSON 값이어야 한다고 설명하는 편이 정확하다.
다만 실무에서는 레코드 단위 처리, 스키마 추론, 로그 분석에 유리하기 때문에 각 행을 객체로 구성하는 경우가 많다.
권장 표현:
개별 행은 유효한 단일 JSON 값이어야 한다. 실무에서는 보통 각 행을 JSON 객체로 구성한다.
5. 주의할 표현
| 오해 소지가 있는 표현 | 더 정확한 표현 |
|---|---|
| NDJSON은 JSON 객체를 한 줄씩 나열한다. | NDJSON은 JSON 값을 한 줄씩 나열한다. 실무에서는 보통 각 값을 객체로 둔다. |
| JSON은 객체 포맷이다. | JSON은 값 직렬화 포맷이며, 객체는 JSON 값의 한 종류다. |
{"id": 1}만 JSON이다. | 객체·배열·문자열·숫자·불리언·null 모두 단일 JSON 값으로 유효하다. |
Connections
- NDJSON (Newline Delimited JSON) — 각 행을 JSON 객체가 아니라 JSON 값/JSON 텍스트로 이해해야 하는 대표 사례
- SSE vs NDJSON — SSE 프레이밍과 NDJSON 데이터 포맷을 구분할 때 JSON payload의 단위를 명확히 해야 한다
- UTF-8 — JSON 텍스트 교환에서 사용하는 표준 문자 인코딩

Discussion
Comments
댓글은 승인 후 공개됩니다.