Json字符串格式是这样的:
如果嵌套了比较多层的话,当前的get方法是不适合的。可以用子类继承当前的类,然后重写GetString、GetFloat、GetBool方法。
注意:要先导入LitJson.dll文件
using LitJson;
using System.IO;
using UnityEngine;
/// <summary>
///
/// * Writer:June
///
/// * Data:2021.6.16
///
/// * Function:从json文件中读取数据
///
/// * Remarks:
///
/// </summary>
public class ReadJsonData
{
/// <summary>
/// Steamingasset目录下json文件路径,包含文件本身+后缀
/// </summary>
private readonly string jsonFilePath;
/// <summary>
/// 从json文件中读取的所有字符
/// </summary>
private readonly string jsonContentText;
/// <summary>
/// 单例
/// </summary>
private static ReadJsonData instance;
public static ReadJsonData Instance
{
get
{
//此处参数是根据路径或者文件名,比如我的json文件是放在steamingasset文件夹下的,文件名为Test.json
if (instance == null) instance = new ReadJsonData("Test");
return instance;
}
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="path">路径</param>
private ReadJsonData(string path)
{
instance = this;
jsonFilePath = path + ".json";
string _path = Path.Combine(Application.streamingAssetsPath, jsonFilePath);
jsonContentText = File.ReadAllText(_path);
}
/// <summary>
/// 获取字符串
/// </summary>
/// <param name="key">键</param>
/// <returns></returns>
public string GetString(string key) => JsonMapper.ToObject(jsonContentText)[key].ToString();
/// <summary>
/// 获取浮点型数据
/// </summary>
/// <param name="key">键</param>
/// <returns></returns>
public float GetFloat(string key) => float.Parse(JsonMapper.ToObject(jsonContentText)[key].ToString());
/// <summary>
/// 获取bool类型值
/// </summary>
/// <param name="key">键</param>
/// <returns></returns>
public bool GetBool(string key)
{
JsonData jsonData = JsonMapper.ToObject(jsonContentText);
string tempStr = jsonData[key].ToString();
return (tempStr.StartsWith("T") || tempStr.StartsWith("t"));
}
}
测试一下:
private void Start()
{
Debug.Log("输出:" + ReadJsonData.Instance.GetString("Path"));
Debug.Log("输出:" + ReadJsonData.Instance.GetFloat("TestFloat"));
Debug.Log("输出:" + ReadJsonData.Instance.GetBool("TestBool"));
}