리버티게임:JSON: 두 판 사이의 차이
imported>Hsl0 (→값) |
(→도구) |
||
(사용자 3명의 중간 판 18개는 보이지 않습니다) | |||
4번째 줄: | 4번째 줄: | ||
</div> | </div> | ||
JSON은 데이터를 저장하는 규격 중 하나로, 기계가 쉽게 읽을 수 있어 다양하게 활용할 수 있습니다. 스크립트, 봇, 모듈이 | JSON은 데이터를 저장하는 규격(규칙) 중 하나로, 기계가 쉽게 읽을 수 있어 다양하게 활용할 수 있습니다. 스크립트, 봇, 모듈이 활용하거나 복잡한 구조의 데이터일 경우에는 JSON 사용이 권장되며, 위키텍스트에서도 쉽게 활용할 수 있습니다. | ||
리버티게임에서는 [[리버티게임:게임 목록|게임 목록]]에 자신의 게임을 나타내기 위해 게임에 관한 정보를 담는 메타데이터(game.json)를 만들거나 각종 틀/소도구가 필요로 하는 정보를 저장할 목적으로 JSON을 활용합니다. 게임 제작자가 자바스크립트 코드를 직접 만들어 사용자가 데이터 읽기/저장 기능을 만들 때에도 유용합니다. | |||
== 구조 == | == 구조 == | ||
JSON은 크게 순서대로 데이터를 저장하는 | [[파일:리버티게임 JSON 예시.png|400px]] | ||
리버티게임의 특집 게임으로 선정되었던 [[위키낚시]]의 [[위키낚시/game.json|게임 메타데이터 JSON 문서]]의 구조입니다(여기서 '''...''' 표기는 그림에 표시된 것 이외에 다른 키-값 쌍이 있다는 설명을 위해 넣었을 뿐, 실제로 그런 항목이 있는 건 아닙니다). 게임의 메타데이터 JSON 문서는 대표적인 객체(Object, 오브젝트) 형태의 JSON입니다. | |||
JSON은 크게 순서대로 데이터를 저장하는 배열 형태와 이름으로 데이터를 저장하는 객체 형태 중 하나로 구성되어 있습니다. 그리고 JSON 문서(또는 파일)는 하나의 큰 객체 안에 배열과 다른 객체들을 담습니다. 위에 설명한 '위키낚시/game.json' 문서의 경우 '''rating''' 객체 아래에 '''libertygame''' 객체가 있고, 다시 libertygame 객체 아래에 하위 객체로 '''age'''와 '''date''' 객체를 담고 있습니다. | |||
이렇게 배열과 객체를 다시 값으로 삽입한 JSON 문서는 가장 바깥에 있는 객체(모든 객체의 뿌리가 된다고 루트(Root) 객체라고도 합니다)에서부터 나뭇가지가 뻗어나오듯이 그 안에 배열이나 다른 객체가 퍼져 나가기 때문에, 트리(Tree) 구조를 가진다고 말합니다. | |||
=== 배열 === | === 배열(Array) === | ||
JSON 안에 값들만 한 줄로 늘어 놓은 배열을 넣을 경우 이렇게 생겼습니다. <code>[</code>로 시작해 <code>,</code>로 각 항목을 구분하고 <code>]</code>로 닫습니다. | |||
<syntaxhighlight lang="json">["산토끼", "보카통", 2018, "너"]</syntaxhighlight> | <syntaxhighlight lang="json">["산토끼", "보카통", 2018, "너"]</syntaxhighlight> | ||
배열은 주로 순서가 있는 데이터의 목록이나, 이름을 쓸 필요가 없는 무작위의 여러 데이터의 목록을 저장하는 데 사용됩니다. | 배열은 주로 순서가 있는 데이터의 목록이나, 이름을 쓸 필요가 없는 무작위의 여러 데이터의 목록을 저장하는 데 사용됩니다. | ||
=== 객체 === | === 객체(Object) === | ||
객체는 이렇게 생겼습니다. <code>{</code>로 시작해 <code>:</code> 앞에 항목의 이름인 키를 문자열 형식으로 쓰고 뒤에 값을 씁니다. <code>,</code>로 각 항목을 구분하고 <code>}</code>로 닫습니다. | JSON에 객체를 넣을 경우 객체는 이렇게 생겼습니다. <code>{</code>로 시작해 <code>:</code> 앞에 항목의 이름인 키를 문자열 형식으로 쓰고 뒤에 값을 씁니다. <code>,</code>로 각 항목을 구분하고 <code>}</code>로 닫습니다. | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
27번째 줄: | 35번째 줄: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
객체는 주로 | 객체는 주로 내부에 있는 데이터를 꺼내기 위한 이름인 키(key)들을 설정하고 각 키마다 거기에 맞는 데이터인 값(Value, 밸류)을 저장하는 데 쓰입니다. '''키에는 문자열만 쓰일 수 있으며, 중복되면 안됩니다'''. 문자열에 관해서는 다음 '값' 단락에 설명하겠습니다. | ||
=== 값 === | === 값 === | ||
JSON에서 | JSON에서 배열이나 객체 안에 값으로 쓸 수 있는 데이터는 숫자, 문자열, 부울, <code>null</code>, 객체, 배열이 있습니다. | ||
사람이 읽기에 형태가 같아도 JSON 문서에서 종류가 다른 데이터는 '''같지 않습니다'''. 예를 들어, 숫자 12와 문자열 "12"는 JSON에서 서로 다른 값입니다. 다만, 위키텍스트에서는 타입을 구분하지 않으므로 #ifeq 등의 파서 함수에서는 같은 값으로 취급합니다. | |||
;숫자 | ;숫자 | ||
:정수, 소수, | :정수, 소수, 지수 표기법이 사용될 수 있습니다. | ||
:여기서 지수 표기법이란, 큰 수나 매우 작은 소수를 소수(Fraction)와 거기에 곱해지는 10의 갯수인 '''지수'''(Exponential) 모양으로 쓰는 것입니다. e 문자 앞에 입력한 소수에 e 문자 뒤에 입력한 정수만큼 10을 제곱한 수를 곱한 값과 같습니다. 예를 들어, <code>3.14e-9</code>로 입력한 수는 <math>3.14 \times 10 ^ {-9}</math>의 값과 같습니다. | |||
;부울 | ;부울 | ||
: | : 맞고 틀린 경우를 나눌 때, 즉 참과 거짓을 나타낼 때 쓰이는 데이터의 종류입니다. 참, 맞음을 나타내는 <code>true</code>와 거짓, 아님을 나타내는<code>false</code>를 사용할 수 있습니다. | ||
;문자열 | ;문자열 | ||
:앞뒤에 <code>"</code>로 둘러싸여 있으며, 다음 표에 따라 문자열이 치환됩니다. | : 계산이 필요한 숫자가 아닌 단순한 숫자 표기나 문장을 표현할 때 사용하는 데이터 종류입니다. 앞뒤에 <code>"</code>로 둘러싸여 있으며, 다음 표에 따라 문자열이 치환됩니다. | ||
:{| class="wikitable" | :{| class="wikitable" | ||
! 입력 || 출력 | ! 입력 || 출력 | ||
61번째 줄: | 72번째 줄: | ||
| \u<var>XXXX</var> || (유니코드 U+<var>XXXX</var> 문자) | | \u<var>XXXX</var> || (유니코드 U+<var>XXXX</var> 문자) | ||
|} | |} | ||
:문자열 내부에 <code>"</code>를 쓰고 싶다면 앞에 <code>\</code>를 붙여 <code>\"</code>로 쓰고, <code>\</code>를 쓰고 싶다면 <code>\\</code>로 써야 한다는 점 꼭 명심해주세요! | :문자열에 줄바꿈을 추가하고 싶다면 <code>\n</code>을 사용해야 합니다. 직접 줄바꿈을 하면 오류가 발생합니다. | ||
:<code>"</code>역시 그냥 쓰면 문자열이 끝나는 것으로 취급하여 오류가 발생하고, <code>\</code>는 그냥 쓰면 엉뚱한 문자로 치환될 수 있습니다. 따라서 문자열 내부에 <code>"</code>를 쓰고 싶다면 앞에 <code>\</code>를 붙여 <code>\"</code>로 쓰고, <code>\</code>를 쓰고 싶다면 <code>\\</code>로 써야 한다는 점 꼭 명심해주세요! | |||
;null | ;null | ||
:비어있는 값을 명시적으로 나타낼 때 쓰입니다. | :비어있는 값을 명시적으로 나타낼 때 쓰입니다. 루아 모듈이나 이를 기반으로 한 틀과 같은 일부 시스템에서는 정의되지 않은 값인지 명시적인 null 값인지 구별할 수 없으므로 주의하세요. | ||
;객체 | ;객체 | ||
78번째 줄: | 90번째 줄: | ||
리버티게임에서는 JSON을 더 잘 다룰 수 있게 도와주는 도구를 제공하고 있습니다. [[모듈:JSON]]을 참고해 주세요. | 리버티게임에서는 JSON을 더 잘 다룰 수 있게 도와주는 도구를 제공하고 있습니다. [[모듈:JSON]]을 참고해 주세요. | ||
JSON 데이터를 읽을 때에는 [[틀:JSON]]을 | JSON 데이터를 읽을 때에는 [[틀:JSON]]을 사용해 간단하게 불러오고, 부울이나 null 값에 따라 분기시킬 수 있습니다. | ||
게임 메타데이터를 만들 경우에는 JSON을 몰라도 게임 메타데이터를 대신 만들어주는 도구가 [[리버티게임:게임 만들기#게임을 만든 뒤|게임 만들기 도움말]]에 준비되어 있습니다! | |||
== [[도보시오]] == | == [[도보시오]] == |
2024년 6월 10일 (월) 20:28 기준 최신판
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
, 객체, 배열이 있습니다.
사람이 읽기에 형태가 같아도 JSON 문서에서 종류가 다른 데이터는 같지 않습니다. 예를 들어, 숫자 12와 문자열 "12"는 JSON에서 서로 다른 값입니다. 다만, 위키텍스트에서는 타입을 구분하지 않으므로 #ifeq 등의 파서 함수에서는 같은 값으로 취급합니다.
- 숫자
- 정수, 소수, 지수 표기법이 사용될 수 있습니다.
- 여기서 지수 표기법이란, 큰 수나 매우 작은 소수를 소수(Fraction)와 거기에 곱해지는 10의 갯수인 지수(Exponential) 모양으로 쓰는 것입니다. e 문자 앞에 입력한 소수에 e 문자 뒤에 입력한 정수만큼 10을 제곱한 수를 곱한 값과 같습니다. 예를 들어,
3.14e-9
로 입력한 수는 의 값과 같습니다.
- 부울
- 맞고 틀린 경우를 나눌 때, 즉 참과 거짓을 나타낼 때 쓰이는 데이터의 종류입니다. 참, 맞음을 나타내는
true
와 거짓, 아님을 나타내는false
를 사용할 수 있습니다.
- 문자열
- 계산이 필요한 숫자가 아닌 단순한 숫자 표기나 문장을 표현할 때 사용하는 데이터 종류입니다. 앞뒤에
"
로 둘러싸여 있으며, 다음 표에 따라 문자열이 치환됩니다.
입력 출력 \\ \ \" " \b (백스페이스 문자) \f (폼 피드 문자) \n (줄바꿈 문자) \r (캐리지 리턴 문자) \t (탭 문자) \/ / \uXXXX (유니코드 U+XXXX 문자)
- 문자열에 줄바꿈을 추가하고 싶다면
\n
을 사용해야 합니다. 직접 줄바꿈을 하면 오류가 발생합니다. "
역시 그냥 쓰면 문자열이 끝나는 것으로 취급하여 오류가 발생하고,\
는 그냥 쓰면 엉뚱한 문자로 치환될 수 있습니다. 따라서 문자열 내부에"
를 쓰고 싶다면 앞에\
를 붙여\"
로 쓰고,\
를 쓰고 싶다면\\
로 써야 한다는 점 꼭 명심해주세요!
- null
- 비어있는 값을 명시적으로 나타낼 때 쓰입니다. 루아 모듈이나 이를 기반으로 한 틀과 같은 일부 시스템에서는 정의되지 않은 값인지 명시적인 null 값인지 구별할 수 없으므로 주의하세요.
- 객체
- 배열
- 객체나 배열 안에 다시 객체나 배열을 넣을 수 있습니다.
{ "반달러": ["산토끼", "보카통", 2018, "너"] }
도구[원본 편집]
리버티게임에서는 JSON을 더 잘 다룰 수 있게 도와주는 도구를 제공하고 있습니다. 모듈:JSON을 참고해 주세요.
JSON 데이터를 읽을 때에는 틀:JSON을 사용해 간단하게 불러오고, 부울이나 null 값에 따라 분기시킬 수 있습니다.
게임 메타데이터를 만들 경우에는 JSON을 몰라도 게임 메타데이터를 대신 만들어주는 도구가 게임 만들기 도움말에 준비되어 있습니다!