当前位置:   article > 正文

Unity3d中使用Json数据解析之美_unity json object to object

unity json object to object

Unity3d在同.net进行http通信的时候,最常见的就是表单数据的提交请求了,但服务器端会返回一堆json数据,这就要求我们在unity中进行json数据的处理了。这也就是本篇要给大家介绍的重点,解析Json数据文件。

 

1、什么是Json

 

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

 

2、JSON 语法规则

 

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

 

3、Json的结构

 

对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,……}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象。key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

 

数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",……],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

 

4、Json在Unity3d中的使用

 

JsonUtility:JsonUtility是Untiy5.3后新增的内容,有时会出现莫名其妙的错误:

  • JsonUtility.FromJson():把json字符串转成对象。
  • JsonUtility.ToJson():把对象转成json字符串。

 

LitJson:LitJson是一个Json的开源项目,这个比较稳定,推荐使用:

  • JsonMapper.ToObject():把json字符串转成对象。
  • JsonMapper.ToJson():把对象转成json字符串。

官网下载:http://www.json.org/json-zh.html

注意:现在官网好像没有了

我的网盘:https://pan.baidu.com/s/1F18sC48JQhO4fwp-bDYVbw   提取码:h5b5

放到Unity3d中的Plugin文件夹内

使用的话要注意引入命名空间

5、上代码:

纯数组的Json数据比较简单,在这个Demo中Json数据是一个对象,对象内有一个数组。分别需要用到一个Json对象模型(JsonObjectModel)和一个Json数组模型(JsonArrayModel)来接收这两种Json数据:

可以通过Json在线编辑器进行编写:http://www.bejson.com/jsoneditoronline/

Json源文件

  1. {
  2. "infoList": [
  3. {
  4. "panelTypeString": "ItemMessage",
  5. "path": "UIPanel/ItemMessagePanel"
  6. },
  7. {
  8. "panelTypeString": "Knapsack",
  9. "path": "UIPanel/KnapsackPanel"
  10. },
  11. {
  12. "panelTypeString": "MainMenu",
  13. "path": "UIPanel/MainMenuPanel"
  14. },
  15. {
  16. "panelTypeString": "Shop",
  17. "path": "UIPanel/ShopPanel"
  18. },
  19. {
  20. "panelTypeString": "Skill",
  21. "path": "UIPanel/SkillPanel"
  22. },
  23. {
  24. "panelTypeString": "System",
  25. "path": "UIPanel/SystemPanel"
  26. },
  27. {
  28. "panelTypeString": "Task",
  29. "path": "UIPanel/TaskPanel"
  30. }
  31. ]
  32. }

JsonObjectModel:Json对象模型

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class JsonObjectModel
  5. {
  6. //JsonArrayModel类型的列表
  7. public List<JsonArrayModel> infoList;
  8. }

JsonArrayModel:Json数组模型

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class JsonArrayModel
  5. {
  6. //对应Json中属性 名字要一样
  7. public string panelTypeString;
  8. public string path;
  9. }

JsonDeserialize:Json解析程序,挂在场景中JsonManager上

  1. using LitJson;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public class JsonDeserialize : MonoBehaviour
  6. {
  7. void Start()
  8. {
  9. //获取Json文件
  10. TextAsset jsonData = Resources.Load<TextAsset>("JsonData");
  11. JsonObjectModel jsonObject = JsonMapper.ToObject<JsonObjectModel>(jsonData.text);
  12. foreach (var info in jsonObject.infoList)
  13. {
  14. Debug.Log(info.panelTypeString + " " + info.path);
  15. }
  16. }
  17. }

结果:

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号