在unity中解析json文件和xml文件

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_34937637/article/details/82467758
  • 目录


JSON与XML的简单介绍


JSON的定义

一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。

XML的定义

扩展标记语言 (Extensible Markup Language,XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

json和xml的优缺点的比较


json文件的解析


创建一个json文件的格式如下:
{}表示对象,[]表示一个数组或者集合,所有数据都必须使用键值对的形式来表示,目的是为了解析时能对对应的解析类进行一一映射

{
    "panelInfoList":
    [
        {"panelType":"MainMenu","path":"UIPanel/MainMenuPanel"},
        {"panelType":"ItemMessage","path":"UIPanel/ItemMessagePanel"},
        {"panelType":"Knapsack","path":"UIPanel/KnapsackPanel"},
        {"panelType":"Shop","path":"UIPanel/ShopPanel"},
        {"panelType":"Skill","path":"UIPanel/SkillPanel"},
        {"panelType":"System","path":"UIPanel/SystemPanel"},
        {"panelType":"Task","path":"UIPanel/TaskPanel"}
    ]
}

使用WWW从远程加载一个json文件:

IEnumerator LoadJson()
    {
        WWW www = new WWW("https://www.sojson.com/open/api/weather/json.shtml?city=深圳");
        yield return www;

        if (www.isDone)
        {
            if (string.IsNullOrEmpty(www.error))
            {
                Debug.Log(www.text);
            }
            else
            {
                Debug.Log(www.error);
            }
        }
    }

注意:

  1. 当一个类要作为字段匹配json文件进行解析时,要在类名前使用[Serializable]标记序列化
  2. 类中的字段访问权限必须是public的,否则无法匹配到json文件中的信息

在unity中解析json文件有两种方式:

1.使用UnityEngine命名空间下的JsonUtility静态类进行解析json文件
JsonUtility.FromJson< T>(jsonStr);
JsonUtility.ToJson(obj);
使用JsonUtility进行对象和json文件的互相转换:

void ReadJson() {
 UserInfo user=JsonUtility.FromJson<UserInfo>(json);
    print(user.name);
    print(user.isWoman);
    print(user.height);
    print(user.age);
    print(user.grade.name);
    print(user.arr[0]);
}
void WriteJson() {
    UserInfo info = new UserInfo();
    info.name = "cc";
    info.height = 170.2f;
    info.age = 20;
    info.isWoman = false;

   string value=JsonUtility.ToJson(info);
    print(value);
}

2.导入litjson.dll引用,并引入命名空间litjson(using litjson;)
JsonMapper.ToObject< T>(jsonStr);
JsonMapper.ToJson(obj);
使用litjson进行对象和json文件的互相转换:

void ReadJson(string json) {
    //JsonMapper.ToObject<>();
    //JsonData表示json对象
    JsonData data = JsonMapper.ToObject(json);
    string date=(string)data["date"];
    print(data["city"]);
    JsonData key = data["data"];
    //该键返回的是一个对象
    JsonData yesterday = key["yesterday"];
    print(yesterday["date"]);
    //该键返回是一个数组
    JsonData forecast = key["forecast"];
    JsonData oneElement = forecast[0];
    print(oneElement["date"]);
}
void WriteJson() {
    //第一种生成json
    // UserInfo info = new UserInfo();
    //string value=JsonMapper.ToJson(info);
    //第二种生成json
    // {"name":"nihao","age":12,"grade":{"name":"\u6570\u5B66","grade":100},"arr":["123","456"]}
    //第三种生成json
    JsonWriter w = new JsonWriter();
    w.WriteObjectStart();
        w.WritePropertyName("name");
        w.Write("nihao");
        w.WritePropertyName("age");
        w.Write(12);
        w.WritePropertyName("grade");
        w.WriteObjectStart();
            w.WritePropertyName("name");
            w.Write("数学");
            w.WritePropertyName("grade");
            w.Write(100);
        w.WriteObjectEnd();
    w.WritePropertyName("arr");
    w.WriteArrayStart();
    w.Write("123");
    w.Write("456");
    w.WriteArrayEnd();
    w.WriteObjectEnd();
    print(w.ToString());
}

xml文件的解析


创建一个xml文件的格式如下:

<Pintu id="2">
    <stage>
        <row>3</row>
    </stage>
</Pintu>

解析xml文件方式: 引入命名空间using System.Xml;使用该命名空间下提供的API

private void ReadXML(string text)
{
    XmlDocument xmlDocument = new XmlDocument();
    //加载XML文件
    xmlDocument.LoadXml(text);

    //访问头结点
    XmlElement xmlElement = xmlDocument.DocumentElement;
    Debug.Log(xmlElement.Name);
    Debug.Log(xmlElement.GetAttribute("id"));

    //访问子节点
    XmlNodeList nodeList = xmlElement.ChildNodes;
    foreach (XmlNode item in nodeList)
    {
        Debug.Log(item["row"].InnerText);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34937637/article/details/82467758