Unity SimpleJSON 使用工具类,记录贴

实际测试发现 SimpleJSON 比 LitJson 效率要高不少,所以决定使用SimpleJSON,记录下具体使用方法。

public class SimpleJsonRootData 
{
    private List<TestData> dataList1 = new List<TestData>();
    private List<TestData> dataList2 = new List<TestData>();

    public void LoadData(string json)
    {
        dataList1.Clear();
        dataList2.Clear();

        JSONNode node = JSONNode.Parse(json);

        JSONNode nodeArray = SimpleJSONTools.AnalysisJsonArgument("dataList1",node);
        for (int i = 0; i < nodeArray.Count; i++)
        {
            TestData td = new TestData();
            td.AnalysisJson(nodeArray[i]);
            dataList1.Add(td );
        }
        nodeArray = SimpleJSONTools.AnalysisJsonArgument("dataList2", node);
        for (int i = 0; i < nodeArray.Count; i++)
        {
            TestData td = new TestData();
            td.AnalysisJson(nodeArray[i]);
            dataList12.Add(td );
        }
    }

    public void SaveData()
    {
        JSONObject nodeRoot = new JSONObject();
        JSONArray nodeArray1 = new JSONArray();
        for (int i = 0; i < dataList1.Count; i++)
        {
            JSONNode node = dataList1[i].GetJson();
            nodeArray1.Add(node);
        }
        nodeRoot["dataList1"]=nodeArray1;

        JSONArray nodeArray2 = new JSONArray();
        for (int i = 0; i < dataList2.Count; i++)
        {
            JSONNode node = dataList2[i].GetJson();
            nodeArray2.Add(node);
        }
        nodeRoot["dataList2"]=nodeArray2;
        Debug.Log("nodeRoot="+nodeRoot.ToString());

    }

}


public class TestDataBase
{
    public int id;
    public string type="";

    public string Id { get => id.ToString();
        set {
            if (string.IsNullOrEmpty(value))
            {
                Debug.Log("value="+value);
            }
            else
            {
                id = int.Parse(value);
            }
        } }
    public string Type { get => type; set => type = value; }

    public virtual JSONObject GetJson()
    {
        JSONObject node =new JSONObject();
        Type t = this.GetType();
        foreach (var item in t.GetProperties())
        {
            node.Add(item.Name, item.GetValue(this,null).ToString());
        }
        //node.Add("id",id);
        //node.Add("type",type);

        return node;
    }

    public virtual void AnalysisJson(JSONNode jsonNode)
    {
        Type t = this.GetType();
        foreach (var item in t.GetProperties())
        {
            JSONNode node = SimpleJSONTools.AnalysisJsonArgument(item.Name, jsonNode);
            if (node != null)
            {
                item.SetValue(this, node.Value.ToString());
            }
        }

        //id = SimpleJSONTools.AnalysisJsonArgument("id", jsonNode);
        //type = SimpleJSONTools.AnalysisJsonArgument("type", jsonNode);
    }
}
public class TestData: TestDataBase
{
    public float angle;
    public string Angle { get => angle.ToString(); set => angle =float.Parse(value); }

    public override JSONObject GetJson()
    {
        JSONObject node = base.GetJson();
        //node.Add("angle", angle);
        return node;
    }
}

public class SimpleJSONTools
{
    public static JSONNode AnalysisJsonArgument(string key, JSONNode node)
    {
        if (node.HasKey(key))
        {
            return node[key];
        }
        else
        {
            Debug.LogErrorFormat("AnalysisJsonArgument: '{0}' not has,json = {1}", key, node.ToString());
            return null;
        }
    }
}

item.SetValue(this, node.Value.ToString())
这个方法,没有找到怎么直接区分value的类型,只能选择都转成了字符串,等待评论区大神指路。

LitJson的一些方法封装

 public static bool TryGetValueByContainsKey(JsonData jsonData, string key, out string arg, string defaultValue = "")
    {
        if (((IDictionary)jsonData).Contains(key))
        {
            arg = jsonData[key].ToString();
            return true;
        }
        arg = defaultValue;
        return false;
    }

    public static bool ContainsKey(JsonData jsonData, string key)
    {
        return (((IDictionary)jsonData).Contains(key));
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity SimpleJSON是Unity引擎中的一种JSON解析器,它可以帮助Unity开发者更轻松地处理JSON数据。下载Unity SimpleJSON非常简单,只需要前往Unity Asset Store中搜索SimpleJSON并下载即可。 Unity Asset Store是Unity引擎官方网站,可以在其中搜索、购买和下载各种Unity资源、插件和工具。在搜索框中输入SimpleJSON,选择合适的版本并购买或下载即可。对于免费的版本,直接点击下载即可完成。 一旦下载完成,将SimpleJSON导入Unity项目中即可开始使用使用SimpleJSON需要将其添加到Unity项目中,并在脚本中引用。在脚本中使用SimpleJSON可以快速解析JSON数据并进行相关操作,如获取数据、修改数据和保存数据等。 总之,Unity SimpleJSON下载非常容易,只需要前往Unity Asset Store搜索并下载即可。它可以帮助Unity开发者更轻松地处理JSON数据,提高开发效率,开发者可以随时使用它来处理JSON数据。 ### 回答2: Unity SimpleJSON是一个方便易用的JSON读取和编写工具,它能够快速地将JSON格式的数据转化为Unity中的对象。用户可以使用其简单的API对JSON数据进行解析和修改。 要下载Unity SimpleJSON,可以通过以下步骤进行: 1. 打开Unity Asset Store页面,搜索SimpleJSON或者直接点击链接:https://assetstore.unity.com/packages/tools/input-management/simplejson-626?_ga=2.173127385.1983933327.1641121748-579483693.1629395063 2. 点击下载按钮,并在弹出的对话框中选择一个保存位置。 3. 等待下载完成后,将下载的文件解压缩到Unity项目的Assets文件夹中。 4. 在Unity中添加SimpleJSON,您可以使用"Assets->Import Package->Custom Package"菜单项,然后选择导入的文件。 5.完成以上步骤后,您就可以在自己的Unity项目中使用SimpleJSON工具了。 Unity SimpleJSON的下载和使用非常简单,不需要复杂的配置和设置,用户只需要按照以上步骤进行,就可以轻松地使用这个强大的工具。同时,SimpleJSON的官方文档也非常详细,甚至提供了许多示例代码及用法说明,这将为用户的使用和开发提供极大的便利。 ### 回答3: Unity SimpleJSON可以让Unity开发者更方便地使用JSON数据。要下载Unity SimpleJSON,可以在GitHub上找到它的代码仓库。在仓库页面中,可以选择“Clone or download”按钮来下载zip文件或者使用Git命令克隆代码仓库。如果你是Unity开发者,也可以直接在Unity的“Package Manager”中搜索并安装Unity SimpleJSON。这样的话,Unity会自动下载和管理最新版本的Unity SimpleJSON,并且保证它始终与你的Unity项目兼容。 无论是哪种方式,下载后只需要将SimpleJSON的源代码放到Unity项目中即可开始使用。与其他Unity插件不同,Unity SimpleJSON不需要配置或者初始化,你可以直接在C#代码中使用它的API读取和解析JSON数据。简单来说,Unity SimpleJSON的下载和使用都非常简单,如果你对JSON数据处理的需求较多,它会成为你在Unity项目中的有力助手。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值