참조 : http://www.tcpschool.com/json/intro

JSON 기초

 

JSON(JavaScript Object Notation, 자바스크립트 객체 표기법)은 
데이터를 교환하고 저장하기 위하여 만들어진 텍스트 기반의 데이터 교환 표준이다.

데이터는 { } 안에 문자열 키와 값의 쌍으로 이루어진다. 
값은 문자열이나 정수, 실수(지수 가능 5.84e+2), true/false(소문자), 배열, 객체, null(소문자) 값도 가능하다.
JSON에서 null은 '값'을 가지고 있지 않다는 의미의 데이터 값 표현이다.
문자열에는 큰따옴표만 사용한다.
문자열에 이스케이프 시퀀스도 사용할 수 있다. \n, \t, \", \\, \/, \uHHHH(네자리 유니코드 문자)
객체는 프로퍼티(데이터 이름과 값의 쌍) 집합이며, 배열은 데이터 값 집합이라는 차이가 있다.
JSON 배열은 서로 다른 타입의 배열 요소를 가질 수 있다.

JSON 표기 예제

{
    "name": "홍길순",
    "age": 350,
    "weight": 56.5
}

{
    "language": [
        {   "name": "Java",  "category": "application"  },
        {    "name": "Python",   "category": "application"   }
    ]
}

{
  " dialogue" : [
      {  "1": "mesage..."  },
      {  "2": "message..."  }
  ]
}

{
    "dog": {
        "name": "금순이",
        "family": "시고르자브종",
        "age": 1,
        "weight": 1.65,
        "owner": {
            "ownerName": "수알치",
            "phone": "01012345678"
        }
    }
}

{
    "msg": [
        "안녕하세요",           <-- 인덱스 0    ,
        "저는 금순이입니다.",  <-- 인덱스 1
        null
    ]
}


JSON 스키마 사용 

[표] JSON 스키마에서 사용할 수 있는 주요 검증 키워드
------------------------------------------------------------------------------------------------
검증 키워드 설명
------------------------------------------------------------------------------------------------
type       유효한 데이터의 타입을 명시한다. (자료 타입)
properties       유효한 데이터 이름과 값의 쌍들을 명시한다.
required       지정한 배열의 모든 요소를 프로퍼티로 가져야 유효하다. (필수)
minimum       지정한 최솟값 이상의 숫자만 유효함. (최소 숫자)
maximum       지정한 최댓값 이하의 숫자만 유효함. (최대 숫자)
multipleOf      지정한 숫자의 배수만 유효함.
maxLength     지정한 최대 길이 이하의 문자열만 유효함. (문자열 최대 길이)
minLength     지정한 최소 길이 이상의 문자열만 유효함. (문자열 최소 길이)
pattern       지정한 정규 표현식에 해당하는 문자열만 유효함. (정규식에 맞는 문자열)
------------------------------------------------------------------------------------------------

[표] 스키마 정보를 나타내는 메타 데이터(metadata) 키워드
---------------------------------------------------------------------
title              제목
description     설명
default          기본값 
---------------------------------------------------------------------

스키마 예제 

{
    "title": "내친구 자료 구조",
    "description": "이 스키마는 친구 데이터를 검증한다.",
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "address": {"type": "string"},
        "age": {"type": "integer"},
        "weight": {"type": "number"},
        "phone": {"type": "string"}
        "school": {
            "type": "object",
            "properties": {
                "schoolName": {"type": "string"},
                "grade": {"type": "number"}
            }
        }
    }
}

2의 배수 값만 가질 수 있다.
{
    "type": "number",
     "multipleOf": 2   
}

0~100 정수만 가질 수 있다. 
exclusive... 옵션으로 지정 값 포함 여부를 정할 수 있다. (false: 포함, true: 미포함)
{
    "type": "number",
    "minimum": 0,
    "maximum": 101,
    "exclusiveMinimum": false
    "exclusiveMaximum": true
}

비밀번호를 4~20자리로 제한한다.
{
    "type": "string",
    "minLength": 4,
    "maxLength": 20
}

객체의 프로퍼티와 필수 항목을 지정한다. 
{
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "family": {"type": "string"},
        "age": {"type": "integer"},
        "weight": {"type": "number"}
    },
    "required": ["name", "family"]
}

개체가 가진 프로퍼티 개수를 검증한다. (최소 1개, 최대 10개)
{
    "type": "object",
    "minProperties": 1,
    "maxProperties": 10
}

배열인지 검증
{
    "type": "array"
}

배열 항목 검증
{
    "type": "array",
    "items": {
        "type": "string"
        "maxLength": 10
    }
}

 "additionalItems": false 키워드를 지정하여 더 이상 다른 요소가 없을 지정한다.
{
    "type": "array",
    "items": [
        {
            "type": "string",
            "maxLength": 10
        },
        {
            "type": "string"
        },
        {
            "type": "string"
        }
    ]
    "additionalItems": false
}

배열 길이를 검증한다(1~10), 또한 서로 같은 값이 있는지 검증한다.
{
    "type": "array",
    "minItems": 1,
    "maxItems": 10,
    "uniqueItems": true
}

값이 "HTML", "Python", "Java"인 경우만 검증에 통과한다.
{
    "type": "string",
    "enum": ["HTML", "Python", "Java"]
}

[표] 정규 표현식  패턴 예 
---------------------------------------------------------------------------------------------------------------
패턴   설명
---------------------------------------------------------------------------------------------------------------
^a          단어의 맨 앞 문자가 a이다. ('a'로 시작하는 단어)
a$          단어의 맨 뒤 문자가 a이다. ('a'로 끝나는 단어)
a(b)c       패턴을 검색 후 괄호에 명시된 문자열을 저장한다. ('abc'를 검색한 후에 'b'를 저장)
[abc]       [ ] 안에 있는 문자를 검색한다. ('abc' 검색)
[a-z]        [ ] 안에 있는 범위의 문자를 검색한다. ('a'부터 'z'까지인 문자 검색)
[^abc]     [ ] 안에 있는 문자 이외의 문자를 검색한다. ('abc'를 제외한 문자 검색)
[^a-z]      [ ] 안에 있는 범위의 문자를 제외한 문자를 검색한다. ('a'~'z' 문자를 제외한 문자 검색)
n+          앞 문자가 1번 이상 나타나는지 검색한다. ({1, }과 같음)
n*           앞 문자가 0번 이상 나타나는지 검색한다. ({0, }과 같음)
n?           앞 문자가 0 또는 1번 나타나는지 검색한다. ({0,1}과 같음)
{n}           앞 문자가 n번 나타나는지 검색한다. (n은 양의 정수)
{m,n}        앞 문자가 최소 m번, 최대 n번 나타나는지 검색한다. (m, n은 양의 정수)
----------------------------------------------------------------------------------------------------------------

1글자 이상의 영문 소문자 
{
    "type": "string",
    "pattern": "[a-z]+"
}


자바스크립트에서 제공하는 JSON 처리 함수(메서드)는 다음과 같다.

- JSON.stringify() :  UTF-16으로 인코딩된 JSON 형식의 문자열을 돌려준다.
- JSON.parse() : 인수로 전달받은 JSON 형식 문자열을 자바스크립트 객체로 변환하여 돌려준다.
- toJSON() : Date.prototype 객체에서 자바스크립트 Date 객체 데이터를 JSON 형식 문자열로 돌려준다.

 

반응형

'AJAX, JSON' 카테고리의 다른 글

JSON 공식 사이트  (0) 2022.05.28
JSP에서 Ajax와 JSON 활용하기 강좌  (0) 2022.05.21
AJAX 기초 예제 (+ Spring)  (0) 2022.05.20
Ajax 웹 개발자 안내서  (0) 2022.05.20
JSON 학습 및 유용한 사이트  (0) 2021.10.31

+ Recent posts