Unity中处理json数据(插件litjson和自带JsonUtility的两种)


方法一:以前用的litjson(2015.7.26)

近期项目中需要处理json数据,可是又偷懒不想写json处理脚本,从网上找了个插件litjson用的还不错。

1.下载litjson(一个dll文件)

2.在unity中导入,以import new assert的形式导入。

3.实例使用脚本如下.....


using UnityEngine;
using System.Collections;
using LitJson;
using System.Text;
using System.IO;

public class NPC
{
	//这里随便写几组数据测试
	public int id;
	public string name;
	public int pos_x;
	public int pos_y;
}

public class LitJsonTest : MonoBehaviour {

	public NPC[] npc;

	// Use this for initialization
	void Start () 
	{
		StoreNpcData ();
	}
	
	void StoreNpcData()
	{
		string json_array=JsonMapper.ToJson(npc);

		string path = Path.Combine(Path.GetDirectoryName(Application.dataPath), "_npc.json");
		
		WriteFile(path,json_array);
	}

	public void WriteFile(string path,string content)
	{
		if(Directory.Exists(path))
		{
			File.Delete(path);
		}
		File.WriteAllText(path,content);
	}
}

就这样,很容易的存储号对象数组,也可以存储其他object类型的数据。


方法二:Unity自带的JsonUtility(2017.7.24)

更新------2017.7.24


最近发现Unity有自带的JsonUtility很好用,就不需要导入了。下面给个示范:


1.保存数据

     
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerInfo:MonoBehaviour
{
    public string name;
    public int lives;
    public float health;

    public string SaveToString()
    {
        return JsonUtility.ToJson(this);
    }
}

 


另起一个脚本尝试存储一个数据:           

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

	// Use this for initialization
	void Start ()
    {
        StorePlayerData();   
	}

    void StorePlayerData()
    {
        PlayerInfo p = new PlayerInfo();
        p.name = "test";
        p.health = 100;
        p.lives = 3;

        string path = Path.Combine(Path.GetDirectoryName(Application.dataPath), "_player.json");

        WriteFile(path, p.SaveToString());
    }

    public void WriteFile(string path, string content)
    {
        if (Directory.Exists(path))
        {
            File.Delete(path);
        }
        File.WriteAllText(path, content);
    }
}


最后运行存成的数据如下:

Unity中处理json数据(插件litjson和自带JsonUtility的两种)_第1张图片


2.读取数据


读取数据在之前的基础上,PlayerInfo添加一个函数

 public void Load(string savedData)
    {
        JsonUtility.FromJsonOverwrite(savedData, this);
    }

然后测试脚本读取:

 PlayerInfo ReadData()
    {
        PlayerInfo p = new PlayerInfo();

        string path = Path.Combine(Path.GetDirectoryName(Application.dataPath), "_player.json");

        string[] s=File.ReadAllLines(path);

        p.Load(s[0]);

        Debug.Log("Read Data:"+p.health + "  " + p.name);

        return p;

    }


Start方法中测试:


void Start ()
    {
        //StorePlayerData();   
        ReadData();
	}


结果输出如下:


用上去还是很方便的。


你可能感兴趣的:(Unity3d)