Skip to content

explain Using Json Data

Yoo Hyeokjin edited this page Jun 16, 2023 · 8 revisions

Json File에 저장한 데이터 불러오기

목차

Json Data 작성

  • 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 불러와서 클래스화 하기 & 클래스화한 데이터를 파싱하기

  • Json Data 객체를 불러오기 위해서는 객체를 담을 클래스를 만들어야 한다.
  • 데이터를 직렬화 시키고 싶다면 [System.Serializable]을 달아 직렬화가 가능하다
  • 중요한 점은 Json File을 읽을 때 키와 변수 이름, 자료형이 일치해야 한다.

객체가 하나로 구성된 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 예시

  • 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;

Unity에 사용된 예시

Collection

[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;
    }
}

Achievement

[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;
    }
}

PowerUp

[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;
    }
}
Clone this wiki locally