C.W.K.
Stream
Lesson 04 of 08 · published

배열 — items, uniqueItems, contains

~10 min · json-schema, arrays, items

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

요소, 크기, 배열 내용 제약

items — 모든 요소의 schema

items 자체가 schema. 배열 모든 요소가 매칭해야 함. {"type": "array", "items": {"type": "string"}} = '문자열 배열'.

prefixItems — 튜플 스타일 검증

prefixItems 에 schema 배열 전달 = 위치별 검증: 위치 0 은 첫 schema, 위치 1 은 두 번째 등. 고정 모양 튜플 ([latitude, longitude], [year, month, day]) 에 사용. prefix 너머는 items 적용 (또는 items: false 로 추가 금지).

크기 & 고유성

  • minItems, maxItems — 개수 경계.
  • uniqueItems — boolean/string/number 쉬움; 객체는 deep equality 비교.
  • contains — 적어도 한 요소가 이 sub-schema 매칭해야 함.
원칙: 동종 배열은 items; 튜플 모양 배열 ([latitude, longitude], [r, g, b, a]) 은 prefixItems. prefixItems 가 충분할 때 oneOf 든 items 잡지 마 — 읽기 시 더 명확하고 위치별 에러 더 잘 잡아.

Code

동종 string 배열·json
{
  "type": "array",
  "items": { "type": "string" },
  "minItems": 1,
  "maxItems": 10,
  "uniqueItems": true
}
튜플 모양 (위치 인식)·json
{
  "type": "array",
  "prefixItems": [
    { "type": "number", "minimum": -90,  "maximum": 90 },
    { "type": "number", "minimum": -180, "maximum": 180 }
  ],
  "items": false,
  "minItems": 2,
  "maxItems": 2
}
contains — 적어도 한 요소 매칭 필수·json
{
  "type": "array",
  "items": { "type": "object" },
  "contains": {
    "type": "object",
    "properties": { "role": { "const": "admin" } },
    "required": ["role"]
  }
}

External links

Exercise

'쇼핑 카트' 객체 schema 작성: items 가 product 항목 배열 (각각 id, name, qty, price), minItems 1, 중복 없음, 적어도 한 항목이 qty > 1. 명세 만족하는 카트 하나와 'qty > 1 어딘가에' 규칙 실패하는 카트 하나 검증. contains 키워드가 무거운 일 함.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.