리버티게임:JSON
JSON은 데이터를 저장하는 규격(규칙) 중 하나로, 기계가 쉽게 읽을 수 있어 다양하게 활용할 수 있습니다. 스크립트, 봇, 모듈이 활용하거나 복잡한 구조의 데이터일 경우에는 JSON 사용이 권장되며, 위키텍스트에서도 쉽게 활용할 수 있습니다.
리버티게임에서는 게임 목록에 자신의 게임을 나타내기 위해 게임에 관한 정보를 담는 메타데이터(game.json)를 만들거나 각종 틀/소도구가 필요로 하는 정보를 저장할 목적으로 JSON을 활용합니다. 게임 제작자가 자바스크립트 코드를 직접 만들어 사용자가 데이터 읽기/저장 기능을 만들 때에도 유용합니다.
구조
리버티게임의 특집 게임으로 선정되었던 위키낚시의 게임 메타데이터 JSON 문서의 구조입니다(여기서 ... 표기는 그림에 표시된 것 이외에 다른 키-값 쌍이 있다는 설명을 위해 넣었을 뿐, 실제로 그런 항목이 있는 건 아닙니다). 게임의 메타데이터 JSON 문서는 대표적인 객체(Object, 오브젝트) 형태의 JSON입니다.
JSON은 크게 순서대로 데이터를 저장하는 배열 형태와 이름으로 데이터를 저장하는 객체 형태 중 하나로 구성되어 있습니다. 그리고 JSON 문서(또는 파일)는 하나의 큰 객체 안에 배열과 다른 객체들을 담습니다. 위에 설명한 '위키낚시/game.json' 문서의 경우 rating 객체 아래에 libertygame 객체가 있고, 다시 libertygame 객체 아래에 하위 객체로 age와 date 객체를 담고 있습니다.
이렇게 배열과 객체를 다시 값으로 삽입한 JSON 문서는 가장 바깥에 있는 객체(모든 객체의 뿌리가 된다고 루트(Root) 객체라고도 합니다)에서부터 나뭇가지가 뻗어나오듯이 그 안에 배열이나 다른 객체가 퍼져 나가기 때문에, 트리(Tree) 구조를 가진다고 말합니다.
배열(Array)
JSON 안에 값들만 한 줄로 늘어 놓은 배열을 넣을 경우 이렇게 생겼습니다. [
로 시작해 ,
로 각 항목을 구분하고 ]
로 닫습니다.
["산토끼", "보카통", 2018, "너"]
배열은 주로 순서가 있는 데이터의 목록이나, 이름을 쓸 필요가 없는 무작위의 여러 데이터의 목록을 저장하는 데 사용됩니다.
객체(Object)
JSON에 객체를 넣을 경우 객체는 이렇게 생겼습니다. {
로 시작해 :
앞에 항목의 이름인 키를 문자열 형식으로 쓰고 뒤에 값을 씁니다. ,
로 각 항목을 구분하고 }
로 닫습니다.
{
"이름": "너",
"HP": 100,
"레벨": 10,
"경험치": 100,
"아이템": null,
"버전": 1.1,
"차단": false
}
객체는 주로 내부에 있는 데이터를 꺼내기 위한 이름인 키(key)들을 설정하고 각 키마다 거기에 맞는 데이터인 값(Value, 밸류)을 저장하는 데 쓰입니다. 키에는 문자열만 쓰일 수 있으며, 중복될 수 없습니다. 문자열에 관해서는 다음 '값' 단락에 설명하겠습니다.
값
JSON에서 배열이나 객체 안에 값으로 쓸 수 있는 데이터는 숫자, 문자열, 부울, null
, 객체, 배열이 있습니다.
- 숫자
- 정수, 소수, 지수 표기법이 사용될 수 있습니다.
- 여기서 지수 표기법이란, 큰 수나 매우 작은 소수를 소수(Fraction)와 거기에 곱해지는 10의 갯수인 지수(Exponential) 모양으로 쓰는 것입니다. e 문자 앞에 입력한 소수에 e 문자 뒤에 입력한 정수만큼 10을 제곱한 수를 곱한 값과 같습니다. 예를 들어,
3.14e-9
로 입력한 수는 의 값과 같습니다.
- 문자열
- 계산이 필요한 숫자가 아닌 단순한 숫자 표기나 문장을 표현할 때 사용하는 데이터 종류입니다. 앞뒤에
"
로 둘러싸여 있으며, 다음 표에 따라 문자열이 치환됩니다.
입력 출력 \\ \ \" " \b (백스페이스 문자) \f (폼 피드 문자) \n (줄바꿈 문자) \r (캐리지 리턴 문자) \t (탭 문자) \/ / \uXXXX (유니코드 U+XXXX 문자)
- 문자열에 줄바꿈을 추가하고 싶다면
\n
을 사용해야 합니다. 직접 줄바꿈을 하면 오류가 발생합니다. 문자열 내부에"
를 쓰고 싶다면 앞에\
를 붙여\"
로 쓰고,\
를 쓰고 싶다면\\
로 써야 한다는 점 꼭 명심해주세요!
- null
- 비어있는 값을 명시적으로 나타낼 때 쓰입니다. 루아 모듈이나 이를 기반으로 한 틀과 같은 일부 시스템에서는 정의되지 않은 값인지 명시적인 null 값인지 구별할 수 없으므로 주의하세요.
- 객체
- 배열
- 객체나 배열 안에 다시 객체나 배열을 넣을 수 있습니다.
{ "반달러": ["산토끼", "보카통", 2018, "너"] }
사람이 읽기에 형태가 같아도 JSON 문서에서 종류가 다른 데이터는 같지 않습니다. 예를 들어, 숫자 12와 문자열 "12"는 JSON에서 서로 다른 값입니다.
도구
리버티게임에서는 JSON을 더 잘 다룰 수 있게 도와주는 도구를 제공하고 있습니다. 모듈:JSON을 참고해 주세요.
JSON 데이터를 읽을 때에는 틀:JSON을 사용할 수 있습니다. 게임 메타데이터를 만들 경우에는 JSON 형태를 만들어주는 마법사 도구가 게임 만들기 도움말에 준비되어 있습니다!