• unity 安卓端使用JSON(LitJson)


    注:!!!untiy 打包安卓平台不允许使用Unity自带的json工具Newtonsoft.Json

    LitJson不支持float类型的字符。

    LitJson支持的格式如下:

    public JsonData(bool boolean);  
    public JsonData(double number);  
    public JsonData(int number);  
    public JsonData(long number);
    public JsonData(object obj) 
    public JsonData(string str); 

    需要让LitJson支持Float类型的方式:

        在Awake里面或者在初始化协程里面调用方法即可

    ///


        /// LitJson数据转换,可使用Float
        ///

        private static void RegisterFloat()
        {
            void Exporter(float obj, JsonWriter writer)
            {
                writer.Write(obj);
            }

            JsonMapper.RegisterExporter((ExporterFunc)Exporter);

            float Importer(double obj)
            {
                return (float)obj;
            }

            JsonMapper.RegisterImporter((ImporterFunc)Importer);
        }

    安卓端,IOS,PC的JSON转换(通用)

    1. using LitJson;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using System.IO;
    5. using System.Linq;
    6. using Unity.VisualScripting;
    7. using UnityEngine;
    8. using UnityEngine.Networking;
    9. public class JsonManager : SingleMono<JsonManager>
    10. {
    11. public AllShengLingManagers allShengLing; //生灵列表
    12. public string path; //Json存放路径
    13. void Start()
    14. {
    15. //初始化Json
    16. StartCoroutine(LoadSave("人族"));
    17. }
    18. void Update()
    19. {
    20. if (Input.GetKeyDown(KeyCode.V))
    21. {
    22. for (int i = 0; i < allShengLing.ShengLingList.Count; i++)
    23. {
    24. Debug.Log(allShengLing.ShengLingList[i].name);
    25. }
    26. }
    27. }
    28. ///
    29. /// 初始化人物操作
    30. ///
    31. /// 种族名称
    32. ///
    33. public IEnumerator LoadSave(string name)
    34. {
    35. RegisterFloat(); //可使用Float类型数据
    36. path = Application.persistentDataPath +"/"+ "AllShengLing.json";
    37. //allShengLing = new AllShengLingManagers();//初始化生灵
    38. //allShengLing.ShengLingList = new List(); //初始化
    39. UnityWebRequest www = UnityWebRequest.Get("file://" + path); //获取路径
    40. yield return www.SendWebRequest(); //发生请求
    41. if (www.result == UnityWebRequest.Result.Success)
    42. {
    43. var fileJson = www.downloadHandler.text; //读取JSON文件
    44. Debug.Log(fileJson);
    45. Debug.Log($"数据存在---");
    46. StreamReader r = new StreamReader(path); // 读
    47. string srRTE = r.ReadToEnd();
    48. Debug.Log("" + "Json配置文件内容:" + "" + srRTE);
    49. allShengLing = JsonMapper.ToObject(srRTE); //反序列化生灵列表
    50. r.Close(); //关闭文本
    51. if (allShengLing == null)
    52. {
    53. Debug.Log("Json为空");
    54. }
    55. else //有数据的话,把各个种族的数据初始化
    56. {
    57. for (int i = 0; i < allShengLing.ShengLingList.Count; i++)
    58. {
    59. if (CSVTest.instance.names.Contains(allShengLing.ShengLingList[i].name)) //判断名字是否相等,然后给到值,初始化
    60. {
    61. //某个UI等于该数据的数值
    62. }
    63. }
    64. //for (int i = 0; i < CSVTest.instance.names.Count; i++) //查找names里面有没有这个名字
    65. //{
    66. // if (CSVTest.instance.names[i].Equals(name)) //循环遍历列表里面的名字是不是叫name,是的情况下就加成并退出循环
    67. // {
    68. // allShengLing.ShengLingList[i].AllZhanLi += 10000; //总战力+10000
    69. // allShengLing.ShengLingList[i].AllSum += 10000; //总人数+10000
    70. // break;
    71. // }
    72. //}
    73. }
    74. }
    75. else
    76. {
    77. Debug.Log("没有该生灵的Json文件,正在生成该数据");
    78. //初始化生灵数据
    79. Init(name);
    80. }
    81. }
    82. ///
    83. /// 初始化生灵
    84. ///
    85. public void Init(string name)
    86. {
    87. ShengLing sl = new ShengLing();
    88. sl.name = name;
    89. sl.LeveL = 1;
    90. sl.QiangZhe = 0;
    91. sl.QiWu = 0;
    92. sl.MiFa = 0;
    93. sl.XieMai = 0;
    94. sl.AllSum = 10000;
    95. sl.AllZhanLi = 10000;
    96. allShengLing.ShengLingList.Add(sl);
    97. CSVTest.instance.names.Add("人族");
    98. GameManagers.instance.SaveRoleData(allShengLing, "AllShengLing.json");
    99. }
    100. ///
    101. /// LitJson数据转换,可使用Float
    102. ///
    103. public void RegisterFloat()
    104. {
    105. void Exporter(float obj, JsonWriter writer)
    106. {
    107. writer.Write(obj);
    108. }
    109. JsonMapper.RegisterExporter((ExporterFunc<float>)Exporter);
    110. float Importer(double obj)
    111. {
    112. return (float)obj;
    113. }
    114. JsonMapper.RegisterImporter((ImporterFunc<double, float>)Importer);
    115. }
    116. ///
    117. /// 删除对象
    118. ///
    119. /// 要删除的名字
    120. public void RemoveShuJu(string name)
    121. {
    122. for (int i = 0; i < allShengLing.ShengLingList.Count; i++)
    123. {
    124. var item = allShengLing.ShengLingList[i]; //要删除的对象
    125. if (item.name.Equals(name))
    126. {
    127. allShengLing.ShengLingList.Remove(item);
    128. GameManagers.instance.SaveRoleData(allShengLing, "AllShengLing.json");
    129. }
    130. }
    131. }
    132. }

    保存JSON脚本展示,放入单例脚本中,方便调用

    1. ///
    2. /// Json保存
    3. ///
    4. /// 数据类型
    5. /// 对象
    6. public void SaveRoleData<T>(T data,string name)
    7. {
    8. Debug.Log("数据保存");
    9. string path = Application.persistentDataPath + "/"+ name;
    10. string saveJsonStr = JsonMapper.ToJson(data); //序列化JSON文件,写入Json
    11. File.WriteAllText(path, saveJsonStr);
    12. }

  • 相关阅读:
    ②、企业快速开发平台Spring Cloud之HTML 元素
    go基础详解2-go run & test
    三翼鸟:看得见的数字,看不见的五大能力
    半导体动态杂谈
    ET-A1-D24-3A-A-T ET-A1-D24-4A-V-T单比例控制放大器
    Python抓取我的CSDN粉丝数,白嫖GithubAction自动抓取
    OpenHarmony开发实战:HDF驱动开发流程
    iApp祁天社区UI成品源码 功能齐全的社区应用
    快速排序(Quick sort)
    C语言定制shell命令
  • 原文地址:https://blog.csdn.net/m0_71624363/article/details/132609569