Unity JSON将数据添加到现有的json数据

时间:2017-06-20 16:45:58

标签: c# json unity3d

我正在为多个数据库设置创建索引。每次创建新数据库时,我都需要一个索引,以便该人可以连接到他们想要处理的数据库。将索引保存在json文件中后,一旦我再次加载它,如何在不删除现有数据的情况下添加它?我看过的大多数教程都告诉你如何保存和加载但不能用现有数据做什么。谢谢!虽然我正在使用JSONUtility,因为这是一个非常简单的操作,但我不反对任何其他库的建议。

2 个答案:

答案 0 :(得分:2)

您可以通过将Json保存为List来真正简化此操作。如果要修改现有的,只需加载它并继续使用Add功能添加到列表中。只有在必要时才保存。

Unity的JSONUtility无法序列化/反序列化数组或List,因此我们需要使用JsonHelper之上构建的JSONUtility包装器。你可以得到here

测试数据以加载序列化和反序列化:

[Serializable]
public class PlayerData
{
    public string name;
    public int score;
}

创建它的列表及其:

List<PlayerData> saveListData = new List<PlayerData>();
PlayerData saveData = new PlayerData();
saveData.name = "Programmer";
saveData.score = 80;
saveListData.Add(saveData);

保存(必须转换为数组才能保存):

string jsonToSave = JsonHelper.ToJson(saveListData.ToArray());
PlayerPrefs.SetString("Data", jsonToSave);
PlayerPrefs.Save();

加载(必须作为数组加载,然后转换回List):

string jsonToLoad = PlayerPrefs.GetString("Data");
//Load as Array
PlayerData[] _tempLoadListData = JsonHelper.FromJson<PlayerData>(jsonToLoad);
//Convert to List
List<PlayerData> loadListData = _tempLoadListData.OfType<PlayerData>().ToList();
for (int i = 0; i < loadListData.Count; i++)
{
    Debug.Log("Got: " + loadListData[i].name);
}

为加载的数据添加更多内容?

loadListData.Add(new PlayerData());
loadListData.Add(new PlayerData());
loadListData.Add(new PlayerData());
loadListData.Add(new PlayerData());

然后您可以再次保存。

答案 1 :(得分:1)

读入现有的JSON(如果存在),将其保存在字符串中。然后,当您准备保存时,您只需将旧JSON连接到新生成的JSON并保存到磁盘。

提示:如果你还没有使用Json.NET。