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

时间:2015-10-30 21:03:49

标签: c# json unity3d

从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);
        }
        }
    }

我一直在通过Switch掉线,但是使用.Value或.AsFloat,我应该点击那些case语句。任何想法是什么,这个代码是旧的Unity 5.0?

2 个答案:

答案 0 :(得分:0)

似乎我在虚假的借口下,JSON文件就像XML,文本,好像它似乎不是,或者至少在读取文件时被SimpleJson认为是二进制文件。我尝试将“文本”写入文件,然后阅读它并且工作正常。所以这是一个错误,我假设示例中的数据是文本。

答案 1 :(得分:0)

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);