모듈:JSON/설명문서: 두 판 사이의 차이

리버티게임, 모두가 만들어가는 자유로운 게임
백괴게임>Gustmd7410
imported>Hsl0
 
(사용자 4명의 중간 판 38개는 보이지 않습니다)
1번째 줄: 1번째 줄:
JSON 데이터를 읽어들여 값을 반환하거나, 데이터를 수정합니다.<!-- 이 모듈을 사용해 데이터를 수정한 뒤, {{틀|}}을 함께 사용하시면 좋습니다. -->
JSON 데이터를 읽어들여 값을 반환하거나, 데이터를 수정합니다.<!-- 이 모듈을 사용해 데이터를 수정한 뒤, {{틀|}}을 함께 사용하시면 좋습니다. -->
== 주의사항 ==
이 모듈은 <code>null</code>을 없는 값으로 간주합니다. 따라서 null 값을 보존하려면 이 모듈을 사용하지 말것을 권장합니다.
<syntaxhighlight lang="json">
사용전:
{"var1": true, "var2": null, "var3": false}
사용후:
{"var1": true, "var3": false}
</syntaxhighlight>
루아에서는 배열의 순서가 1부터 시작합니다. 이 점 유의해 주세요.
<syntaxhighlight lang="json">["aaa", "bbb", "ccc", "ddd"]</syntaxhighlight>
{| class="wikitable"
! JS
! 값
! Lua
|-
! 0
| aaa
! 1
|-
! 1
| bbb
! 2
|-
! 2
| ccc
! 3
|-
! 3
| ddd
! 4
|}
객체의 경우 속성이 표시되는 순서가 바뀔 수 있습니다. 단, 배열은 해당되지 않으며 객체의 순서가 바뀌어도 속성명은 변하지 않으므로 변수를 호출할 때에 큰 문제는 없습니다.
<syntaxhighlight lang="json">
사용전:
{"var1": "aaaa", "var2": 1234, "var3": true}
[1, 3, 5, 9]
사용후:
{"var2":1234,"var3":true,"var1":"aaaa"}
[1,3,5,9]
</syntaxhighlight>


== 사용법 ==
== 사용법 ==
5번째 줄: 50번째 줄:
객체를 사용한다면 속성명을 그대로 입력하시면 됩니다.
객체를 사용한다면 속성명을 그대로 입력하시면 됩니다.


배열의 경우 [[위키백과:루아 (프로그래밍 언어)|Lua]]를 사용하므로 순서는 1부터 시작한다는 것을 유의해 주세요.
JSON에서는 문자열, 숫자, 부울, 배열, 객체, null을 다루며, 이 틀에서 값을 입력할 때 기본적으로는 문자열으로 처리되지만, JSON 값의 형식에 맞춰서 입력한다면 자동으로 타입이 적용됩니다. 만약 강제적으로 문자열을 적용하고 싶다면 <code>""</code>로 이스케이프하실 수 있습니다. 만약, 이스케이프된 문자열을 ""로 묶고 싶으시다면 그 안에
""를 더 넣으실 수 있습니다. (예시: <code>"true"</code>→<code>true</code>, <code>""123""</code>→<code>"123"</code>)


JSON에서는 문자열, 숫자, 부울, 배열, 객체, null을 다루며, 이 틀에서 값을 입력할 때 기본적으로는 문자열으로 처리되지만, 각각의 형식에 맞춰서 입력한다면 자동으로 타입이 적용됩니다. 만약 강제적으로 문자열을 적용하고 싶다면 <code>""</code>로 이스케이프하실 수 있습니다. 만약, 이스케이프된 문자열을 ""로 묶고 싶으시다면 그 안에
칸을 비우시면 없는 값으로 간주되어 내용이 삭제됩니다. 만약, 빈 문자열을 사용하고 싶으시다면 <code>""</code>을 입력하세요. 칸을 비우기 곤란하시다면 <code>null</code>을 사용하여 내용을 지우실 수 있습니다. null 역시 마찬가지로 <code>"null"</code>과 같이 이스케이프가 가능합니다.
""를 더 넣으실 수 있습니다. (예시: <code>"true"</code>, <code>""123""</code>)
 
칸을 비우시면 없는 값으로 간주되어 내용이 삭제됩니다. 만약, 빈 문자열을 사용하고 싶으시다면 <code>""</code>을 입력하세요. 칸을 비우기 곤란하시다면 <code>nil</code>을 사용하여 내용을 지우실 수 있습니다. nil 역시 마찬가지로 <code>"nil"</code>과 같이 이스케이프가 가능합니다.
 
이 모듈은 <code>null</code>을 처리할 수 없으며 없는 값으로 간주됩니다. 따라서 null을 사용하는 데이터에는 이 모듈을 사용하는 것을 권장하지 않습니다.


=== JSON 코드 ===
=== JSON 코드 ===
JSON 코드는 다음과 같은 다양한 상황에서 입력이 가능합니다. 아래와 같은 내용을 두번째 변수(JSON 코드)에 입력해 주세요.
조작할 JSON 데이터를 특정합니다. 상황에 따라 다음 중 한가지 방법대로 두번째 변수(JSON 코드)에 입력해 주세요.
* JSON 코드 직접 입력
* JSON 코드 직접 입력
:JSON 코드가 반환되는 이 모듈도 사용하실 수 있습니다.
:JSON 코드가 반환되는 이 모듈도 사용하실 수 있습니다.
26번째 줄: 67번째 줄:


=== 새로 만들기 ===
=== 새로 만들기 ===
<nowiki>{{</nowiki>[[도움말:게임 만들기#.23switch|#switch]]:<nowiki>}}</nowiki>문법과 비슷하게 JSON 데이터를 새로 만들 수 있습니다.
<nowiki>{{</nowiki>[[리버티게임:특수 함수#.23switch|#switch]]:<nowiki>}}</nowiki>문법과 비슷하게 JSON 데이터를 새로 만들 수 있습니다.


<pre>{{#invoke:JSON|new|()|(변수)=(값a)|...}}</pre>
<pre>{{#invoke:JSON|new|(값1)|(변수a)=(값a)|...}}</pre>


변수를 지정하지 않은 경우 변수는 틀과 같이 순서로 지정이 되며, 배열을 만들고자 할 경우 변수 없이 값만 입력하시면 됩니다.
변수를 지정하지 않은 경우 변수는 틀과 같이 순서로 지정이 되며, 배열을 만들고자 할 경우 변수 없이 값만 입력하시면 됩니다.
47번째 줄: 88번째 줄:
}}
}}
</pre>
</pre>
<source lang="json">{
<syntaxhighlight lang="json">{
"var2": 1234,
"var2": 1234,
"var3": true,
"var3": true,
"var1": "aaaa"
"var1": "aaaa"
}</source>
}</syntaxhighlight>


어때요, 신기하지 않나요? 이 기능과 함께 switch에서 JSON으로 갈아타세요!
어때요, 신기하지 않나요? 이 기능과 함께 switch에서 JSON으로 갈아타세요!
다른 방법으로, 일반 문자열을 콤마(,) 등을 기준으로 나눠서 배열을 만들 수 있습니다.
<pre>{{#invoke:JSON|spl|(문자열)|(구분자)}}</pre>
구분자를 비우거나 입력하지 않으면 기본적으로 글자 하나하나씩 나눕니다.
'''여기서 주의할 점은 구분자는 일반 문자열이 아니라 정규 표현식과 비슷한 패턴으로 입력해야 한다는 겁니다.''' [[mw:Extension:Scribunto/Lua_reference_manual/ko#Ustring_patterns|루아의 패턴 문법(영문)]]을 참고해서 입력해 주세요.


=== 변수값 얻기 ===
=== 변수값 얻기 ===
JSON 데이터에 있는 변수의 값을 얻으려면 다음과 같이 입력합니다:
JSON 데이터에 있는 변수의 값을 얻으려면 다음과 같이 입력합니다:
<pre>{{#invoke:JSON|get|(JSON 코드)|(변수)|(기본값)}}</pre>
<pre>{{#invoke:JSON|get|(JSON 코드)|(변수)}}</pre>
위와 같이 입력하시면 해당 변수의 값만 그대로 나오며, 값이 없는 경우 기본값이 나옵니다.
위와 같이 입력하시면 해당 변수의 값만 그대로 나오며, 값이 없는 경우 기본값이 나옵니다.


66번째 줄: 115번째 줄:


=== 변수값 변경 ===
=== 변수값 변경 ===
{{#vardefine:value|{{#rand:0|9}}}}
{{#vardefine:value|{{rand|0|9}}}}
{{#vardefine:bar|<choose><option>true</option><option>false</option></choose>}}
{{#vardefine:bar|<choose><option>true</option><option>false</option></choose>}}
JSON 데이터에 있는 변수의 값을 변경하려면 다음과 같이 입력합니다:
JSON 데이터에 있는 변수의 값을 변경하려면 다음과 같이 입력합니다:
75번째 줄: 124번째 줄:
  <nowiki>{{#invoke:JSON|set|(JSON 코드)|var|</nowiki>{{#var:value}}<nowiki>}}</nowiki>
  <nowiki>{{#invoke:JSON|set|(JSON 코드)|var|</nowiki>{{#var:value}}<nowiki>}}</nowiki>


* 변수 추가
JSON 데이터에 없는 변수를 추가할때도 마찬가지로 똑같이 입력하시면 됩니다.
:JSON 데이터에 있는 변수를 추가하려면 변수값을 변경할 때와 같이 입력하시면 됩니다.


* 변수 제거
변수의 값을 비워두거나 null로 설정하면 변수가 제거됩니다.
:JSON 데이터에 있는 변수를 제거하려면 다음과 같이 변수값을 변경할 때의 값을 비워두시면 됩니다.
:<pre>{{#invoke:JSON|set|(JSON 코드)|(변수)}}</pre>
:위와 같이 입력하시면 입력한 JSON 코드에서 해당 변수가 제거된 값이 나옵니다.
:
:예를 들어, <code>var</code> 변수를 제거하려면 이렇게 입력하세요:
:<pre>{{#invoke:JSON|set|(JSON 코드)|var}}</pre>


=== 코드 합치기 ===
=== 코드 합치기 ===
두 JSON 코드를 합치려면 아래와 같이 입력합니다.
두 JSON 코드를 합칩니다. new랑 궁합이 매우 좋습니다.
<pre>{{#invoke:JSON|mer|(JSON 코드1)|(JSON 코드2)}}</pre>
<pre>{{#invoke:JSON|mer|(JSON 코드1)|(JSON 코드2)|...}}</pre>


만약 중복된 항목이 있으면 2번 코드의 값으로 설정됩니다. new랑 궁합이 매우 좋습니다.
만약 중복된 항목이 있으면 2번 코드의 값으로 설정됩니다.


이를 응용하여 내용 수정에도 사용하실 수 있습니다. 만약 <code>var1</code>의 값을 <code>{{#var:value}}</code>로 바꾸고 <code>var2</code>의 값을 {{#var:bar}}</code>로 바꾸려는 경우 다음과 같이 입력해 주세요.
이를 응용하여 내용 수정에도 사용하실 수 있습니다. 만약 <code>var1</code>의 값을 <code>{{#var:value}}</code>로 바꾸고 <code>var2</code>의 값을 <code>{{#var:bar}}</code>로 바꾸려는 경우 다음과 같이 입력해 주세요. 다만 new는 값을 제거하는 데에는 이용하실 수 없으며 JSON 코드를 직접 입력하셔야 합니다.  
  <nowiki>{{#invoke:JSON|mer|(JSON 코드)|{{#invoke:JSON|new|var1=</nowiki>{{#var:value}}<nowiki>|var2=</nowiki>{{#var:bar}}<nowiki>}}}}</nowiki>
  <nowiki>{{#invoke:JSON|mer|(JSON 코드)|{{#invoke:JSON|new|var1=</nowiki>{{#var:value}}<nowiki>|var2=</nowiki>{{#var:bar}}<nowiki>}}}}</nowiki>
=== 변수 제거 ===
여러개의 변수를 일괄적으로 제거합니다.
<pre>{{#invoke:JSON|del|(JSON 코드)|(변수1)|(변수2)|...}}</pre>


=== 작업 조합 ===
=== 작업 조합 ===
만약 여러 작업을 동시에 하고 싶다면 두번째 변수에 이 틀을 다시 넣을 수 있습니다. 이런식으로 말이지요:
만약 여러 작업을 동시에 하고 싶다면 cmd명령을 사용해 CGI2 방식으로 명령어를 입력하거나, [[모듈:JSON/cmd]]를 사용하실 수 있습니다. [[모듈:JSON/cmd]]는 JSON 코드 부분을 생략합니다.
  <nowiki>{{#invoke:JSON|get|
  <nowiki>{{#invoke:JSON|cmd
{{#invoke:JSON|set|
  |{{#invoke:JSON|new|var=</nowiki><choose><option>true</option><option>false</option></choose><nowiki>}}
{{#invoke:JSON|set|
  |{{#invoke:JSON/cmd|mer|
{{#invoke:JSON|set|
  {{#invoke:JSON|new
{{#invoke:JSON|new|var=</nowiki><choose><option>true</option><option>false</option></choose><nowiki>}}
  |var1=</nowiki>{{rand|0|9}}<nowiki>
|var}}
  |var2={{#invoke:JSON|new|ㅁㄴㅇㄹ}}
|var1|</nowiki>{{#rand:0|9}}<nowiki>}}
  }}
|var2|
 }}
{{#invoke:JSON|new|ㅁㄴㅇㄹ}}
 {{#invoke:JSON/cmd|del|var}}
}}
 {{#invoke:JSON/cmd|get|var</nowiki>{{rand|1|2}}<nowiki>}}
|var</nowiki>{{#rand:1|2}}<nowiki>}}</nowiki>
}}
</nowiki>


== [[도보시오]] ==
== [[도보시오]] ==
* [[리버티게임:JSON]]
* [[틀:JSON]]
* [[틀:JSON]]

2022년 7월 27일 (수) 19:40 기준 최신판

JSON 데이터를 읽어들여 값을 반환하거나, 데이터를 수정합니다.

주의사항[원본 편집]

이 모듈은 null을 없는 값으로 간주합니다. 따라서 null 값을 보존하려면 이 모듈을 사용하지 말것을 권장합니다.

사용전:
{"var1": true, "var2": null, "var3": false}

사용후:
{"var1": true, "var3": false}

루아에서는 배열의 순서가 1부터 시작합니다. 이 점 유의해 주세요.

["aaa", "bbb", "ccc", "ddd"]
JS Lua
0 aaa 1
1 bbb 2
2 ccc 3
3 ddd 4

객체의 경우 속성이 표시되는 순서가 바뀔 수 있습니다. 단, 배열은 해당되지 않으며 객체의 순서가 바뀌어도 속성명은 변하지 않으므로 변수를 호출할 때에 큰 문제는 없습니다.

사용전:
{"var1": "aaaa", "var2": 1234, "var3": true}
[1, 3, 5, 9]

사용후:
{"var2":1234,"var3":true,"var1":"aaaa"}
[1,3,5,9]

사용법[원본 편집]

변수[원본 편집]

객체를 사용한다면 속성명을 그대로 입력하시면 됩니다.

JSON에서는 문자열, 숫자, 부울, 배열, 객체, null을 다루며, 이 틀에서 값을 입력할 때 기본적으로는 문자열으로 처리되지만, JSON 값의 형식에 맞춰서 입력한다면 자동으로 타입이 적용됩니다. 만약 강제적으로 문자열을 적용하고 싶다면 ""로 이스케이프하실 수 있습니다. 만약, 이스케이프된 문자열을 ""로 묶고 싶으시다면 그 안에 ""를 더 넣으실 수 있습니다. (예시: "true"true, ""123"""123")

칸을 비우시면 없는 값으로 간주되어 내용이 삭제됩니다. 만약, 빈 문자열을 사용하고 싶으시다면 ""을 입력하세요. 칸을 비우기 곤란하시다면 null을 사용하여 내용을 지우실 수 있습니다. null 역시 마찬가지로 "null"과 같이 이스케이프가 가능합니다.

JSON 코드[원본 편집]

조작할 JSON 데이터를 특정합니다. 상황에 따라 다음 중 한가지 방법대로 두번째 변수(JSON 코드)에 입력해 주세요.

  • JSON 코드 직접 입력
JSON 코드가 반환되는 이 모듈도 사용하실 수 있습니다.
  • JSON 문서 불러오기
JSON 문서를 불러와서 입력하시려면 다음과 같이 틀의 형태로 입력해 주세요.
{{사용자:홍길동/데이터.json}}
{{:한게임/DB}}
  • 빈 JSON 코드
비어있는 JSON 코드를 사용하시려면 {}[]만 입력해 주세요.

새로 만들기[원본 편집]

{{#switch:}}문법과 비슷하게 JSON 데이터를 새로 만들 수 있습니다.

{{#invoke:JSON|new|(값1)|(변수a)=(값a)|...}}

변수를 지정하지 않은 경우 변수는 틀과 같이 순서로 지정이 되며, 배열을 만들고자 할 경우 변수 없이 값만 입력하시면 됩니다.

이 기능은 앞서 말했다시피 #switch 문법과 유사하기 때문에 호환이 될 수 있습니다. 앞부분의 {{#switch:{{{1}}}부분을 한번 {{풀기:#invoke:JSON|new로 변경해 보세요. switch가 JSON으로 마법같이 변신할겁니다.

{{#switch:{{{1}}}
|var1=aaaa
|var2=1234
|var3=true
}}
{{풀기:#invoke:JSON|new
|var1=aaaa
|var2=1234
|var3=true
}}
{
	"var2": 1234,
	"var3": true,
	"var1": "aaaa"
}

어때요, 신기하지 않나요? 이 기능과 함께 switch에서 JSON으로 갈아타세요!

다른 방법으로, 일반 문자열을 콤마(,) 등을 기준으로 나눠서 배열을 만들 수 있습니다.

{{#invoke:JSON|spl|(문자열)|(구분자)}}

구분자를 비우거나 입력하지 않으면 기본적으로 글자 하나하나씩 나눕니다.

여기서 주의할 점은 구분자는 일반 문자열이 아니라 정규 표현식과 비슷한 패턴으로 입력해야 한다는 겁니다. 루아의 패턴 문법(영문)을 참고해서 입력해 주세요.

변수값 얻기[원본 편집]

JSON 데이터에 있는 변수의 값을 얻으려면 다음과 같이 입력합니다:

{{#invoke:JSON|get|(JSON 코드)|(변수)}}

위와 같이 입력하시면 해당 변수의 값만 그대로 나오며, 값이 없는 경우 기본값이 나옵니다.

예를 들어, var 변수의 값을 얻는다면 이렇게 입력하세요:

{{#invoke:JSON|get|(JSON 코드)|var}}

{{JSON}}을 이용하면 더 간단히 입력하실 수 있습니다. 자세한 내용은 해당 문서를 확인해 주세요.

변수값 변경[원본 편집]

JSON 데이터에 있는 변수의 값을 변경하려면 다음과 같이 입력합니다:

{{#invoke:JSON|set|(JSON 코드)|(변수)|(값)}}

위와 같이 입력하시면 해당 변수의 값이 변경된 JSON 코드가 반환됩니다.

예를 들어, var 변수의 값을 0로 변경할 경우 이렇게 입력하세요:

{{#invoke:JSON|set|(JSON 코드)|var|0}}

JSON 데이터에 없는 변수를 추가할때도 마찬가지로 똑같이 입력하시면 됩니다.

변수의 값을 비워두거나 null로 설정하면 변수가 제거됩니다.

코드 합치기[원본 편집]

두 JSON 코드를 합칩니다. new랑 궁합이 매우 좋습니다.

{{#invoke:JSON|mer|(JSON 코드1)|(JSON 코드2)|...}}

만약 중복된 항목이 있으면 2번 코드의 값으로 설정됩니다.

이를 응용하여 내용 수정에도 사용하실 수 있습니다. 만약 var1의 값을 0로 바꾸고 var2의 값을 false로 바꾸려는 경우 다음과 같이 입력해 주세요. 다만 new는 값을 제거하는 데에는 이용하실 수 없으며 JSON 코드를 직접 입력하셔야 합니다.

{{#invoke:JSON|mer|(JSON 코드)|{{#invoke:JSON|new|var1=0|var2=false}}}}

변수 제거[원본 편집]

여러개의 변수를 일괄적으로 제거합니다.

{{#invoke:JSON|del|(JSON 코드)|(변수1)|(변수2)|...}}

작업 조합[원본 편집]

만약 여러 작업을 동시에 하고 싶다면 cmd명령을 사용해 CGI2 방식으로 명령어를 입력하거나, 모듈:JSON/cmd를 사용하실 수 있습니다. 모듈:JSON/cmd는 JSON 코드 부분을 생략합니다.

{{#invoke:JSON|cmd
  |{{#invoke:JSON|new|var=true}}
  |{{#invoke:JSON/cmd|mer|
   {{#invoke:JSON|new
   |var1=4
   |var2={{#invoke:JSON|new|ㅁㄴㅇㄹ}}
   }}
  }}
  {{#invoke:JSON/cmd|del|var}}
  {{#invoke:JSON/cmd|get|var2}}
 }}

도보시오[원본 편집]