-
Notifications
You must be signed in to change notification settings - Fork 2
explain Using Json Data
Yoo Hyeokjin edited this page Jun 16, 2023
·
8 revisions
- Json 데이터는 Key와 Value처럼 쌍으로 이루어진 데이터를 저장한다.
- {}는 객체를 의미하고, []는 순서가 있는 배열을 나타낸다.
- int, float, string, bool, null, 배열 데이터 타입을 지원한다.
- 주석을 지원하지 않는다. 따라서 키의 이름을 명확하게 정해야 한다.
- 작은 문법 오류에도 굉장히 민감하다. 중간에 대괄호나 중괄호, 콜론, 쉼표 등 잘 살펴서 작성해야한다.
- Collection, Achievement, PowerUp 이렇게 Key가 있고 배열 데이터를 Value로 갖는다. 배열 데이터 안에도 Key와 Value로 나눠서 저장한 것이다.
{
"Collection": [
{
"Name": "채찍",
"Explain": "좌우로 적을 관통해 공격합니다.",
"Rank": "black"
},
{
"Name": "피눈물",
"Explain": "채찍의 진화형. 치명타 피해를 입히고 HP를 흡수합니다.",
"Rank": "black"
}],
"Achievement": [
{
"Explain": "레벨 5에 도달",
"Obtain": "날개"
},
{
"Explain": "레벨 10에 도달",
"Obtain": "왕관"
}],
"PowerUp": [
{
"Explain": "랭크당 피해량이 5% 증가합니다\n(최대 +25%)",
"AccessoryLevel": 5
},
{
"Explain": "랭크당 피격 피해량이 1 줄어듭니다\n(최대 -3)",
"AccessoryLevel": 3
}]
}
- Json Data 객체를 불러오기 위해서는 객체를 담을 클래스를 만들어야 한다.
- 데이터를 직렬화 시키고 싶다면 [System.Serializable]을 달아 직렬화가 가능하다
- 중요한 점은 Json File을 읽을 때 키와 변수 이름, 자료형이 일치해야 한다.
- Json File
{
"Name": "유혁진",
"Age": 24
}
- 다음과 같이 2개의 property를 가진 것을 불러올 때 예시
[System.Serializable]
class Info
{
public string Name;
public int Age;
}
private Info myInfo = JsonUtility.FromJson<Info>(Resources.Load<TextAsset>("Resource안에 있는 파일 경로").ToString());
private string myName = myInfo.Name;
private int myAge = myInfo.Age;
- Json File
{
"Person":[
{
"Name": "유혁진",
"Age": 24
},
{
"Name": "지구룡",
"Age": 20
}],
"Animal":[
{
"Name": "해피",
"Age": 5
"species": "dog"
},
{
"Name": "꼬꼬",
"Age": 2
"species": "chicken"
}]
}
- 다음과 같은 여러 객체가 들어간 JsonFile에서 Person 불어오는 예시
[System.Serializable]
class Info
{
public string Name;
public int Age;
}
[System.Serializable]
class InfoData
{
public Info[] Person;
}
- 불러온 Person 객체 데이터 파싱 예시
private InfoData myInfo = JsonUtility.FromJson<InfoData>(Resources.Load<TextAsset>("Resource안에 있는 파일 경로").ToString());
private string myName = myInfo.Person[0].Name;
private int myAge = myInfo.Person[0].Age;
- 다음과 같은 여러 객체가 들어간 JsonFile에서 Animal 불어오는 예시
[System.Serializable]
class Info
{
public string Name;
public int Age;
public string species;
}
[System.Serializable]
class InfoData
{
public Info[] Animal;
}
- 불러온 Animal 객체 데이터 파싱 예시
private InfoData myInfo = JsonUtility.FromJson<InfoData>(Resources.Load<TextAsset>("Resource안에 있는 파일 경로").ToString());
private string myName = myInfo.Animal[0].Name;
private int myAge = myInfo.Animal[0].Age;
private string species = myInfo.Animal[0].species;
[System.Serializable]
class CollectionInfo
{
public string Name;
public string Explain;
public string Rank;
}
[System.Serializable]
class CollectionInfoData
{
public CollectionInfo[] Collection;
}
public class CollectionItemInfo : MonoBehaviour, IPointerEnterHandler
{
private CollectionInfoData mInfoData;
private string mItemName;
private string mExplain;
private string mRank;
private void Start(){
mInfoData = JsonUtility.FromJson<CollectionInfoData>(Resources.Load<TextAsset>("GameData/ItemExplainDataKorean").ToString());
this.mItemName = mInfoData.Collection[mItemIndex-1].Name;
this.mExplain = mInfoData.Collection[mItemIndex-1].Explain;
this.mRank = mInfoData.Collection[mItemIndex-1].Rank;
}
}
[System.Serializable]
class AchiData
{
public string Explain;
public string Obtain;
}
[System.Serializable]
class AchiInfoData
{
public AchiData[] Achievement;
}
public class AchiInfo : MonoBehaviour, IPointerEnterHandler
{
private AchiInfoData mInfoData;
private string mExplain;
private string mObtain;
private void Start(){
mInfoData = JsonUtility.FromJson<AchiInfoData>(Resources.Load<TextAsset>("GameData/ItemExplainDataKorean").ToString());
this.mExplain = mInfoData.Achievement[mAchi-1].Explain;
this.mObtain = mInfoData.Achievement[mAchi-1].Obtain;
}
}
[System.Serializable]
class PowerUpData
{
public string Explain;
public int AccessoryLevel;
}
[System.Serializable]
class PowerUpInfoData
{
public PowerUpData[] PowerUp;
}
public class PowerUpInfo : MonoBehaviour, IPointerDownHandler
{
private PowerUpInfoData mInfoData;
private string mExplain;
public int AccessoryMaxLevel;
void Start()
{
mInfoData = JsonUtility.FromJson<PowerUpInfoData>(Resources.Load<TextAsset>("GameData/ItemExplainDataKorean").ToString());
this.mExplain = mInfoData.PowerUp[mAccessoryIndex-1].Explain;
this.AccessoryMaxLevel = mInfoData.PowerUp[mAccessoryIndex-1].AccessoryLevel;
}
}