SimpleJSON Unity异常:反序列化JSON时出错.未知标签:123

本文关键字:未知 出错 标签 JSON Unity 异常 反序列化 SimpleJSON | 更新日期: 2023-09-27 18:19:54

从json文件访问数据时出现此错误。

我正在努力遵循以下教程:http://wiki.unity3d.com/index.php/SimpleJSON

并创建了一个test.json文件,我想从中提取数据,其中包含:

{
    "version": "1.0",
    "data": {
        "sampleArray": [
            "string value",
            5,
            {
                "name": "sub object"
            }
        ]
    }
}

在Unity中使用以下代码:

void LoadFiles()
{
    FileInfo f = m_info[0]; //Array of Files in Folder
    // I had a foreach loop here, but wanted to specify the file for testing before I tried to parse through one of my own
    print("I Found : " + f);
    var N = JSONNode.LoadFromFile(f.FullName);
    var versionString = N["version"].Value;        // versionString will be a string containing "1.0"
    var versionNumber = N["version"].AsFloat;      // versionNumber will be a float containing 1.0
    var name = N["data"]["sampleArray"][2]["name"];// name will be a string containing "sub object"
    print("vs=" + versionString + " vn=" + versionNumber + " name=" + name);
}

我得到的只是未知标签,来自我从来源收集的:

public static JSONNode Deserialize(System.IO.BinaryReader aReader)
    {
        JSONBinaryTag type = (JSONBinaryTag)aReader.ReadByte();
        switch(type)
        {
        case JSONBinaryTag.Array:
        {
            int count = aReader.ReadInt32();
            JSONArray tmp = new JSONArray();
            for(int i = 0; i < count; i++)
                tmp.Add(Deserialize(aReader));
            return tmp;
        }
        case JSONBinaryTag.Class:
        {
            int count = aReader.ReadInt32();                
            JSONClass tmp = new JSONClass();
            for(int i = 0; i < count; i++)
            {
                string key = aReader.ReadString();
                var val = Deserialize(aReader);
                tmp.Add(key, val);
            }
            return tmp;
        }
        case JSONBinaryTag.Value:
        {
            return new JSONData(aReader.ReadString());
        }
        case JSONBinaryTag.IntValue:
        {
            return new JSONData(aReader.ReadInt32());
        }
        case JSONBinaryTag.DoubleValue:
        {
            return new JSONData(aReader.ReadDouble());
        }
        case JSONBinaryTag.BoolValue:
        {
            return new JSONData(aReader.ReadBoolean());
        }
        case JSONBinaryTag.FloatValue:
        {
            return new JSONData(aReader.ReadSingle());
        }
        default:
        {
            throw new Exception("Error deserializing JSON. Unknown tag: " + type);
        }
        }
    }

我一直在切换,但使用.Value或.AsFoat,我应该符合这些case语句。知道发生了什么吗,这是Unity 5.0的旧代码吗?

SimpleJSON Unity异常:反序列化JSON时出错.未知标签:123

我似乎是在假装,JSON文件就像XML,文本,看起来不是,或者至少SimpleJson在读取文件时假设它是二进制的。我试着把"文本"写到一个文件中,然后阅读,效果很好。所以这是一个错误,我假设例子中的数据是文本。

JSONNode.LoadFromFile函数改为JSONNode.Parse(字符串)将流转换为字符串

 System.IO.FileStream fs = System.IO.File.OpenRead(f.FullName);
 long length = fs.Length;
 byte[] stream = new byte[length];
 fs.Read(stream, 0, (int)length);
 string json = System.Text.Encoding.UTF8.GetString(stream);
 var N = JSONNode.Parse(json);