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<Item> database = new List<Item>();
//创建一个方法
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<Item> database = new List<Item> ();

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

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值