Json中使用JsonMapper解析数据和保存(学习记录)

1、创建一个Json文件

Json代码格式:

[
    {
        "id": 0,
        "name": "Sword",
        "level": 100
    },

    {
        "id": 1,
        "name": "Knife",
        "level": 100
    }
]

2、创建一个JsonData 类型对象用存储解析后返回的数据

private JsonData itemData;

3、使用File.ReadAllText()方法传入需要的文本信息,再使用JsonMapper来对文本进行解析,我们Json文件放在

Assets/ItemAssets目录下,目录格式按照下面的格式写,最终解析好的数据存到“itemData”里面

itemData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/ItemAssets/items.json"));

4、因为把“itemData”里面的数据信息分别提取出来,所以现在创建单独一个类Item用于存储和获取“itemData里面的信息”

public class Item{
    public int ID {get;set;}
    public string Name {get;set;}
    public int Level {get;set;}
    
    //构造函数
    public Item (int _id,string _name,int _level)
    {
        this.ID = _id;
        this.Name = _name;
        this.Level = _level;
    }
}

5、这里创建一个方法来存储数据,由于每个物品都是一个单独的Item,需要再创建数组或者List来存储这些Item,database[i]就是解析出来的Item数据信息,可以Debug.Log(database[0].Name) 这样调试查看信息对不对

private List database = new List();
//创建一个方法
void SaveItemData()
{
    for(int i = 0; i < itemData.Count; i++)
    {
        database.Add(new Item((int)itemData[i]["id"],itemData[i]["name"].ToString(),(int)itemData[i]["level"]));
    }
}

6、创建一个新方法,使用ID来查找物品的信息

public Item GetItemData(int _id)
{
    for(int i = 0; i < database.Count; i++)
    {
        if(_id == database[i].ID)
        {
            return database[i];
        }
    }
    return null;
}

附代码:

public class ItemDatabase : MonoBehaviour{
    private JsonData itemData;
    private List database = new List ();

    void Awake()
    {
        itemData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/ItemAssets/items.json"));
        SaveItemData();
    }
    
    void SaveItemData()
    {
        for(int i = 0; i < itemData.Count; i++)
        {
            database.Add(new Item((int)itemData[i]["id"],itemData[i]["name"].ToString(),(int)itemData[i]["level"]));
        }
    }

    public Item GetItemData(int _id)
    {
        for(int i = 0; i < database.Count; i++)
        {
            if(_id == database[i].ID)
            {
                return database[i];
            }
        }
        return null;
    }
}

public class Item{
    public int ID {get;set;}
    public string Name {get;set;}
    public int Level {get;set;}
    
    //构造函数
    public Item (int _id,string _name,int _level)
    {
        this.ID = _id;
        this.Name = _name;
        this.Level = _level;
    }
}

 

你可能感兴趣的:(Json中使用JsonMapper解析数据和保存(学习记录))