【问题标题】:Unity JSON Add data to existing json dataUnity JSON 将数据添加到现有的 json 数据中
【发布时间】:2017-06-20 16:45:58
【问题描述】:

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

【问题讨论】:

    标签: c# json unity3d


    【解决方案1】:

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

    Unity 的JSONUtility 无法序列化/反序列化数组或列表,因此我们需要使用构建在JSONUtility 之上的JsonHelper 包装器。你可以得到那个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();
    

    加载(必须加载为数组然后转换回列表):

    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());
    

    然后您可以再次保存它。

    【讨论】:

    • 如果有人将这个添加到他们自己的项目中,请确保添加 LINQ 库,以便 OfType 和 ToList 可以工作。
    • 是的,using System.Linq; 需要使用 OfType。您也可以使用循环手动执行此操作。
    • 效果很好!谢谢!!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-02
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 2021-02-19
      • 2011-10-13
      • 1970-01-01
      相关资源
      最近更新 更多