unity3d 在Android端读取 StreamingAssets 目录下的 Json数据

在读取StreamingAssets目录下的json数据时,不知道是不是带着新手buff的原因,老是出现各种问题,读取不了文件,在安卓目录下找不到地址,解析不了json,最后还是使用www方式读取到文件

1、D_Text.json 内容, 在StreamingAssets 目录下

 {
        "ID": 3001001,
        "type": 1,
        "text": "\u60a8ID\u4e3a{0}\u7684{1}\u51fa\u552e\u6210\u529f\uff0c\u83b7\u5f97{2}\u9a91\u58eb\u5e01",
        "title": "\u51fa\u552e\u6210\u529f"
    }
2、转换成的类 
[System.Serializable]
public class D_Text
{ 
    public int ID { get; set; }
    public int type { get; set; } 
    public string text { get; set; } 
    public string title { get; set; }
}

在线转换校验

3、注意格式必须时“ANSI”不然在手机上读取不到
    //读取StreamingAssets中的文件   参数 StreamingAssets下的路径
    public string getTextForStreamingAssets(string path)
    {
        string localPath = "";
        if (Application.platform == RuntimePlatform.Android)
        {
            localPath = Application.streamingAssetsPath + path;
        }
        else
        {
            localPath = "file:///" + Application.streamingAssetsPath + path;
        }

        WWW t_WWW = new WWW(localPath);     //格式必须是"ANSI",不能是"UTF-8"

        if (t_WWW.error != null)
        {
            Debug.LogError("error : " + localPath);
            return "";          //读取文件出错
        }

        while (!t_WWW.isDone)
        {

        }
        Debug.Log("t_WWW.text=  " + t_WWW.text);
        return t_WWW.text;
    }
4、json解析
    public D_Text LoadJsonD_Text()
    {
        string jsonStr = getTextForStreamingAssets("/D_Text.json");
        if (jsonStr == null)
        {
            return null;
        }
        return JsonUtility.FromJson<D_Text>(json);
    }
5、如果遇到非标准化的json可采用JsonConvert 解析
例如:
    {
        "3001001": {
            "ID": 3001001,
            "type": 1,
            "text": "\u60a8ID\u4e3a{0}\u7684{1}\u51fa\u552e\u6210\u529f\uff0c\u83b7\u5f97{2}\u9a91\u58eb\u5e01",
            "title": "\u51fa\u552e\u6210\u529f"
        },
        "3001002": {
            "ID": 3001002,
            "type": 1,
            "text": "\u60a8ID\u4e3a{0}s\u7684{1}\u51fa\u552e\u8d85\u65f6\uff0c\u5df2\u4e0b\u67b6",
            "title": "\u51fa\u552e\u8d85\u65f6"
        }
    }
Dictionary<int, D_Text> m_D_Text = new Dictionary<int, D_Text>(); //消息 
public Dictionary<int, D_Text> LoadJsonD_Text() 
{
    if (m_D_Text.Count > 0) return m_D_Text; 
    string jsonStr = getTextForStreamingAssets("/D_Text.json"); 
    if (jsonStr == null) { return null; } string json = jsonStr; 
    if (json.Length > 2)
     {
         int j = 0;     //遇到一次json前面莫名奇妙多了个字符,但又不是空字符,while做的一些特殊处理,可不用             
        while (json[0] != '{') 
        { 
            Debug.LogError("D_Sell.py.datas.json is not json" + json[0]); 
            json.Remove(0); j++; 
            if (j > 10) 
            { 
                break; 
            } 
        } 
        JObject obj = JObject.Parse(json); 
        foreach (var inter in obj) 
        { 
        D_Text kky = JsonConvert.DeserializeObject<D_Text>(inter.Value.ToString()); 
        m_D_Text.Add(kky.ID, kky); 
        } 
    } 
    return m_D_Text; 
}


Newtonsoft.Json.dll 下载






阅读更多
文章标签: unity c# json
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

unity3d 在Android端读取 StreamingAssets 目录下的 Json数据

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭