
게임을 개발하다보면 대사나 인벤토리 상태등을 저장할때가있다.
클래스에 넣어두기엔 껏다키면 데이터는 날라갈꺼고 데이터베이스를 쓰기엔 좀 ,, 많이 일이커질수가있다
그렇다면 뭐 json이나 csv, 아니면 엑셀등을 사용할수도있다 그중 json에 대해 정리해보면 다음과 같다
JToken
JObject
JArray
JValue
사실 JProperty나 JConstructor도 있긴한데 난 솔직히 쓸일이없다 생각한다, 어짜피 오브젝트쪽에서 왠만하면 해결된다.
JArray도 사실 foreach문써서 오브젝트 내 값 순환시켜도되는지라...
그래서 일단 많이쓰는 토큰이랑 오브젝트만 정리해본다.
{
"npcs": [
{
"id": "testNpc",
"dialogs":
{
"start":
{
"first_visit" : ["안녕?, 반가워!","이건 일단 테스트야.","어째뜬 잘 작동은 하네!","근데 이제뭐해?"],
"return_visit" : ["그래도 대사 스크립트는 잘 작동하네!","그러면 된거겠지?!"]
},
"end":
{
"event_clear_visit": ["상호 작용테스트야.","성공은 했어!","이제 버그잡아야지"]
}
}
},
{
"id": "2",
"dialogs": {
}
},
{
"id": "3",
"dialogs": {
"greeting": ["Ah, a new face!", "Hello there!"],
"trade": ["I have rare items for sale.", "Take a look at my goods."],
"farewell": ["Come back anytime.", "Don't be a stranger."]
}
}
]
}
{
"dialogs": {
"start": {
"first_visit": ["안녕?, 반가워!","이건 일단 테스트야.","어째뜬 잘 작동은 하네!","근데 이제뭐해?"],
"return_visit": ["그래도 대사 스크립트는 잘 작동하네!","그러면 된거겠지?!"]
},
"end": {
"event_clear_visit": ["상호 작용테스트야.","성공은 했어!","이제 버그잡아야지"]
}
}
}
이제 제일많이쓰는 오브젝트에 대해 몇가지 사용방법에 대해 설명하면 다음과 같다.
예를들어 토큰에서
var dialogsValue = (JObject)keyName.Value;
이런식으로 내부에있는 오브젝트를 가져왔다 치자.
내부의 값을 가져올려면 일단 그 오브젝트의 키를 가지고 그 값에 맞는걸 받아오면된다.
방법은 여러가지있는데, 만약 저위에있는 구조처럼 내부에 중첩된 구조라면 이름 하나하나씩써가면서 할바엔 순환시키는 방법도있다.
foreach (var v in (JObject)dialogsValue)// 해당키의 json 내부 저장된 배열 순회
{
output.Add((keyName.Key, v.Value.ToObject<string[]>()));
}
이런방식으로꺼낼수있다. 내부는 딱히 신경안써도된다. 이방법은 한번에 데이터배열을 다빼내는게아니라 튜플리스트로 넣기위해 있는구조다.
아니면 뭐 한번에 꺼낼수도있다.
var data = (JObject)dialogsValue)[dialogs];
이런식으로 값을 한번에 빼내는 방법도있다 키값만 안다면 그 층에있는쪽에서 맞는키를 찾고 그 값을 가져온다.
아니면 JArray써도된다.