Android

Android] JSON - JavaScript Object Notatio

김코식 2022. 3. 19. 12:10

JSON이란

  • 데이터 저장, 전송을 위한 경량의 DATA 교환 형식
  • 사람이 읽을 수 있는 텍스트 기반의 데이터 교환 표준

JSON의 특징

  • Java Script를 확장하여 만들어짐
  • Java Script의 객체 표기법을 따름
  • 사람과 기계 모두 읽기 편하게 고안
  • 프로그래밍 언어와 운영체제에 독립적

JSON 구조

- name/value 형태의 쌍

  <value 값>

  • 숫자(number) - 정수, 실수, 지수
  • 문자열(string) - 일련의 연속된 문자의 집합, "" 안에 나열
  • 불린(boolean) - 참(true)과 거짓(false) 표현
  • 객체(object) - name/value로 구성된 프로퍼티의 정렬되지 않은 집합({ }로 묶여있음) ,쉼표(,)를 사용하여 여러 개 프로퍼티 사용 가능
  • 배열(array) - 여러 데이터가 순서를 가지고 나열된 집합([ ]로 묶여있음), 쉼표(,)를 사용하여 여러 개의 데이터 나열 가능
  • NULL - 아무런 값도 가지고 있지 않은 빈 값 null로 표현

-JSON의 데이터는 쉼표로 나열

-객체(Object)는 {}로 표현

-배열(Array)은 []로 표현

 

JSON 장점

  1. 내용이 함축적으로 최소한의 정보만 가지기 때문에 용량이 적고 속도가 빠름
  2. 언어에 독립적임
  3. 사용이 쉬움

 

JSON 단점

  1. 내용이 함축적이기 때문에 의미 파악이 어려울 수 있음
  2. 경량의 데이터 교환 형식이기 때문에 대용량급의 데이터 송수신엔 부적합함

JSON 스키마

-JSON 데이터를 전송받을 때 데이터가 적합한 형태의 데이터인지 확인하기 위한 방법

 

-스키마 검증 

  • 데이터 타입이 정확한가
  • 필수로 받아와야 하는 데이터가 포함되었는가
  • 데이터가 원하는 범위 안에 있는가
{
    "title" : "스키마",
    "description": "데이터 검증을 위한 스키마",
    "type":"object",
    "properties":{
        "name":{"type":"string"},
        "age":{"type":"integer"},
        "number":{"type":"integer"},
        "adress":{ "type":"string"}
    }
}

type 키워드를 사용하여 유요한 타입 명시 > 해당 데이터가 유효한지 검사

properties  키워드 사용 시 해당 객체가 가지는 프로퍼티가 유효한지 검사


숫자 검증

  • 정수
{
    "type":"integer"
}

해당 키가 정수인지 검사

  • 숫자
{
    "type":"number"
}

해당 키가 숫자인지 검사

  • 배수
{
    "type":"number",
    "multipleOf":3
}

해당 키가 3의 배수인지 검사

  • 범위
{
    "type":"number",
    "minimum":1,
    "maximum":10
}

해당 키가 1보다 크거나 같고 10보다 작은 숫자인지 검사



문자열 검증

  • 문자열
{
    "type":"string"
}

해당 데이터가 문자열인지 검사

  • 문자열 길이
{
    "type":"string",
    "minLength":1,
    "maxLength":10
}

해당 데이터의 문자열이 1보다 크고 10보다 작은지 검사



객체 검증

  • 객체
{
    "type":"object"

}

해당 데이터가 객체인지 검사

  • 프로퍼티
{
    "type":"object",

    "properties":{
    "name":{"type":"string"},
    "num":{"type":"integer"},
    "age":{"type":"integer"}
    }
}

해당 객체가 가지는 프로퍼티가 유효한지 검사

  • 필수 프로퍼티
{
    "type":"object",

    "properties":{
    "name":{"type":"string"},
    "num":{"type":"integer"},
    "age":{"type":"integer"}
    }
    "required":["name","num"]
}

해당 데이터가 객체이면서 프로퍼티로 name과 num을 가졌는지 검사

  • 프로퍼티 개수

{
    "type":"object",
    "minProperties":1
    "maxProperties":5
}

해당 데이터가 객체이면서 프로퍼티를 1~3개를 가졌는지 검사



배열 검증

  • 배열 요소
{
    "type":"array",
    "items" {
            "type":"number"
        }
    
}

해당 데이터가 배열이면서 배열 요소가 모두 숫자인지 검사

{
    "type":"array",
    "items"[
        {
            "type":"number"
        },
        {
            "type":"number"
        },
        {
            "type":"string"
        }
            ]
}

해당 데이터가 배열이면서 첫번째, 두 번째 배열 요소가 숫자이고 세 번째 배열 요소가 문자열인지 검사

  • 배열 길이
{
    "type":"array",
    "minItem":1,
    "maxItem":5
}

해당 데이터가 배열이면서 가지고 있는 배열 요소가 1~5인지 검사

  • 중복 값
{
    "type":"array",
    "uniqueItems":ture
}

해당 데이터가 배열이면서 가지고 있는 배열 요소의 값이 중복이 되지 않는가 검사

(uniqueItems 값이 true면 배열 요소 값의 중복을 허락하지 않는다)

(uniqueItems 값이 false면 배열 요소 값의 중복을 허락한다)



기타 검증

  • 볼린
{
    "type":"boolean"
}

해당 데이터가 볼린인지 검사

  • NULL
{
    "type":"null"
}

해당 데이터가 NULL인지 검사