当前位置:   article > 正文

Unity 解析Json格式_json数据解析 unity

json数据解析 unity

        JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。

 

JSON 语法规则

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

 

JSON 名称/值对

JSON 数据的书写格式是:名称/值对。

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"name":"赵云"

 

JSON 值

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

 

JSON 对象

JSON 对象在花括号中书写:

对象可以包含多个名称/值对:

{ "name":"赵云" , "level":30 }

 

JSON 数组

JSON 数组在方括号中书写:

数组可包含多个对象:

  1. {
  2. "Heros": [
  3. { "name":"赵云" , "level":30 },
  4. { "name":"马超" , "level":35 },
  5. { "name":"关羽" , "level":15 },
  6. { "name":"张飞" , "level":18 },
  7. { "name":"黄忠" , "level":50 }
  8. ]
  9. }

 

Unity中解析JSON

  • 比较流行的listjson。
  • JsonUtility是Unity官方提供的Json解析功能, 被转换的对象必须是可被序列化的,需要标记[System.Serializable] 属性。
  • Newtonsoft.Json (推荐可以解析复杂的json,不需要和json字段一对一 ,灵活)

 

使用JsonUtility 解析Json案例一

1.新建一个Text文本,命名为“TestJson01.txt”。(文本内容如下)

  1. {
  2. "name":"赵云","level":30,"skill":["迅雷","狂雷天牢","连弩狂涛"]
  3. }

2.在Unity中创建一个“Resources/Json”文件夹,将 TestJson01.txt 文件导入在文件中。

3.新建一个类,命名为“JsonInfo.cs”,用来建立数据模型。(如下)

  1. [System.Serializable]
  2. public class JsonInfo
  3. {
  4. public string name;
  5. public int level;
  6. public string[] skill;
  7. }

4.新建一个类,命名为“TestJson.cs”。(代码如下)

  1. using UnityEngine;
  2. public class TestJson : MonoBehaviour
  3. {
  4. private void Awake()
  5. {
  6. string jsonString = Resources.Load<TextAsset>("Json/TestJson01").ToString();
  7. JsonInfo jsonInfo = JsonUtility.FromJson<JsonInfo>(jsonString);
  8. Debug.Log("姓名:"+jsonInfo.name);
  9. Debug.Log("等级:"+jsonInfo.level.ToString());
  10. for(int i=0;i< jsonInfo.skill.Length;i++)
  11. {
  12. Debug.Log("技能"+i+":"+ jsonInfo.skill[i]);
  13. }
  14. }
  15. }

5.将 TestJson.cs 挂载在场景中,并运行程序。(结果如下)

 

使用JsonUtility 解析Json案例二

1.新建一个Text文本,命名为“TestJson01.txt”。(文本内容如下)

  1. {
  2. "Heros":[
  3. {"name":"赵云","level":30,"skill":["迅雷","狂雷天牢","连弩狂涛"]},
  4. {"name":"马超","level":35,"skill":["赤焰","赤焰燃","赤焰火海","连弩激射"]},
  5. {"name":"关羽","level":15,"skill":["火箭烈","火箭强袭"]},
  6. {"name":"张飞","level":18,"skill":["火箭天袭","龙炮","迫击龙炮"]},
  7. {"name":"黄忠","level":50,"skill":["贰灭元炮","肆灭元炮","太极祝融弓","八极元","龙凤天舞"," 天雷殛电"]}
  8. ]
  9. }

2.新建一个类,命名为“HeroInfo.cs”。(代码如下)

  1. [System.Serializable]
  2. public class HeroInfo
  3. {
  4. public JsonInfo[] Heros;
  5. }

3.新建一个类,命名为“TestJson2.cs”。(代码如下)

  1. using UnityEngine;
  2. public class TestJson2 : MonoBehaviour
  3. {
  4. private void Awake()
  5. {
  6. string jsonString = Resources.Load<TextAsset>("Json/TestJson02").ToString();
  7. HeroInfo heroInfos = JsonUtility.FromJson<HeroInfo>(jsonString);
  8. for (int i = 0; i < heroInfos.Heros.Length; i++)
  9. {
  10. JsonInfo jsonInfo = heroInfos.Heros[i];
  11. string nameSrt = jsonInfo.name;
  12. int level = jsonInfo.level;
  13. string skillStr = string.Empty;
  14. string result = string.Empty;
  15. for (int j = 0; j < jsonInfo.skill.Length; j++)
  16. {
  17. skillStr += "技能" + j + ":" + jsonInfo.skill[j];
  18. }
  19. result = string.Format("姓名:{0} 等级:{1} {2}", nameSrt, level, skillStr);
  20. print(result);
  21. }
  22. }
  23. }

4.将 TestJson2.cs 挂载在场景中,并运行程序。(结果如下)

  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/123376
推荐阅读
相关标签
  

闽ICP备14008679号