Unity利用JsonFX解析Json格式文本
来源:互联网 发布:淘宝账号及密码免费送 编辑:程序博客网 时间:2024/06/10 17:40
一、首先导入一个脚本和一个Dll文件
二、分析JsonDataTool工具类
1
2
using UnityEngine;
3
using System.Collections;
4
using System.Collections.Generic;
5
using JsonFx.Json;//注意引入命名空间
6
public class JsonDataTool : MonoBehaviour
7
{
8
9
/// <summary>
10
/// 根据一个JSON,得到一个类
11
/// </summary>
12
static public T JsonToClass<T>(string json) where T : class
13
{
14
T t = JsonReader.Deserialize<T>(json);
15
return t;
16
}
17
18
/// <summary>
19
/// 根据一个JSON的文件地址,得到一个类
20
/// </summary>
21
static public T AddressToClass<T>(string txtAddress) where T : class
22
{
23
TextAsset jsonData = Resources.Load(txtAddress) as TextAsset;
24
return JsonToClass<T>(jsonData.text);
25
}
26
27
/// <summary>
28
/// 将JSON转换为一个类数组
29
/// </summary>
30
static public T[] JsonToClasses<T>(string json) where T : class
31
{
32
//Debug.Log(json);
33
T[] list = JsonReader.Deserialize<T[]>(json);
34
return list;
35
}
36
37
/// <summary>
38
/// 给Json文件的地址。转换为一个类数组
39
/// </summary>
40
static public T[] AddressToClasses<T>(string txtAddress) where T : class
41
{
42
TextAsset jsonData = Resources.Load(txtAddress) as TextAsset;
43
return JsonToClasses<T>(jsonData.text);
44
}
45
46
}
三、实战解析
1、将json格式文件放进Resources文件夹下
文本内容如下:
1
[
2
{
3
"Id": "1001",
4
"Name": "天煞镯",
5
"Icon": "天煞镯",
6
"InventoryType": "Equip",
7
"EquipType": "Bracelet",
8
"Price": "4500",
9
"StartLevel": "4",
10
"Quailty": "5",
11
"Damage": "450",
12
"Hp": "1000",
13
"Power": "500",
14
"Des": "风元素桑德兰王子的武器。桑德兰王子被炎魔拉格纳罗斯偷袭杀死之后,被封印于两个头颅之中,由炎魔手下加尔与加顿男爵保管。"
15
},
16
{
17
"Id": "1002",
18
"Name": "龙渊翅",
19
"Icon": "龙渊翅",
20
"InventoryType": "Equip",
21
"EquipType": "Wing",
22
"Price": "6000",
23
"StartLevel": "4",
24
"Quailty": "5",
25
"Damage": "300",
26
"Hp": "2000",
27
"Power": "300",
28
"Des": "恶魔猎人就职的要求之一就是搜寻到一种特定的恶魔,把它作为祭品,这样就将恶魔灵魂的一部份束缚于体内。"
29
},
30
{
31
"Id": "1003",
32
"Name": "天劫戒",
33
"Icon": "天劫戒",
34
"InventoryType": "Equip",
35
"EquipType": "Ring",
36
"Price": "3000",
37
"StartLevel": "4",
38
"Quailty": "5",
39
"Damage": "200",
40
"Hp": "1500",
41
"Power": "100",
42
"Des": "太阳之井是血精灵一族的堕落的源泉,而精灵一族原本就被称为“众星之子”。想要吸收太阳之井化身安微娜能量的基尔加丹,被玩家与NPC合力所击败。"
43
},
44
{
45
"Id": "1004",
46
"Name": "血之魂臂铠",
47
"Icon": "血之魂臂铠",
48
"InventoryType": "Equip",
49
"EquipType": "Cloth",
50
"Price": "7000",
51
"StartLevel": "4",
52
"Quailty": "5",
53
"Damage": "100",
54
"Hp": "5000",
55
"Power": "50",
56
"Des": "法杖随着达拉然的毁灭而损毁,但武器的碎片落入了克尔苏加德之手,他竭力要修复这一法杖。"
57
},
58
{
59
"Id": "1005",
60
"Name": "龙颚盔",
61
"Icon": "龙颚盔",
62
"InventoryType": "Equip",
63
"EquipType": "Helm",
64
"Price": "4000",
65
"StartLevel": "4",
66
"Quailty": "5",
67
"Damage": "350",
68
"Hp": "3000",
69
"Power": "150",
70
"Des": "火焰之王,拉格纳罗斯居住在火焰位面,被黑铁矮人召唤所召唤。他所踏足之地,赤脊山脉因此毁灭,形成了黑石山与熔火之心。"
71
},
72
{
73
"Id": "1006",
74
"Name": "混沌开天斧",
75
"Icon": "混沌开天斧",
76
"InventoryType": "Equip",
77
"EquipType": "Weapon",
78
"Price": "7500",
79
"StartLevel": "3",
80
"Quailty": "5",
81
"Damage": "1000",
82
"Hp": "100",
83
"Power": "900",
84
"Des": "在土灵和铁矮人之间爆发的第一次战争中,瓦兰奈尔碎裂了。据信这把武器的残片已在战争中遗失。"
85
},
86
{
87
"Id": "1007",
88
"Name": "天绝项链",
89
"Icon": "天绝项链",
90
"InventoryType": "Equip",
91
"EquipType": "Necklace",
92
"Price": "3500",
93
"StartLevel": "3",
94
"Quailty": "2",
95
"Damage": "500",
96
"Hp": "500",
97
"Power": "420",
98
"Des": "凯尔萨斯:“你看,我的收藏中有许多武器。” 背景出处不详。"
99
},
100
{
101
"Id": "1008",
102
"Name": "天泣靴",
103
"Icon": "天泣靴",
104
"InventoryType": "Equip",
105
"EquipType": "Shoes",
106
"Price": "6000",
107
"StartLevel": "3",
108
"Quailty": "2",
109
"Damage": "200",
110
"Hp": "400",
111
"Power": "120",
112
"Des": "灵魂收割者的名号是由于这把剑在每杀死一个人之后都会吸取他们的灵魂,加强自己的暗影力量。"
113
},
114
{
115
"Id": "1009",
116
"Name": "灰烬之靴",
117
"Icon": "灰烬之靴",
118
"InventoryType": "Equip",
119
"EquipType": "Shoes",
120
"Price": "6000",
121
"StartLevel": "3",
122
"Quailty": "2",
123
"Damage": "200",
124
"Hp": "400",
125
"Power": "120",
126
"Des": "风元素桑德兰王子的武器。桑德兰王子被炎魔拉格纳罗斯偷袭杀死之后,被封印于两个头颅之中,由炎魔手下加尔与加顿男爵保管。"
127
},
128
{
129
"Id": "1010",
130
"Name": "众神之光",
131
"Icon": "众神之光",
132
"InventoryType": "Equip",
133
"EquipType": "Wing",
134
"Price": "6000",
135
"StartLevel": "5",
136
"Quailty": "2",
137
"Damage": "300",
138
"Hp": "2000",
139
"Power": "300",
140
"Des": "恶魔猎人就职的要求之一就是搜寻到一种特定的恶魔,把它作为祭品,这样就将恶魔灵魂的一部份束缚于体内。"
141
},
142
{
143
"Id": "1011",
144
"Name": "精灵戒指",
145
"Icon": "精灵戒指",
146
"InventoryType": "Equip",
147
"EquipType": "Ring",
148
"Price": "3000",
149
"StartLevel": "5",
150
"Quailty": "2",
151
"Damage": "200",
152
"Hp": "1500",
153
"Power": "100",
154
"Des": "太阳之井是血精灵一族的堕落的源泉,而精灵一族原本就被称为“众星之子”。想要吸收太阳之井化身安微娜能量的基尔加丹,被玩家与NPC合力所击败。"
155
},
156
{
157
"Id": "1012",
158
"Name": "天衣月舞",
159
"Icon": "天衣月舞",
160
"InventoryType": "Equip",
161
"EquipType": "Cloth",
162
"Price": "7000",
163
"StartLevel": "5",
164
"Quailty": "4",
165
"Damage": "100",
166
"Hp": "5000",
167
"Power": "50",
168
"Des": "法杖随着达拉然的毁灭而损毁,但武器的碎片落入了克尔苏加德之手,他竭力要修复这一法杖。"
169
},
170
{
171
"Id": "1013",
172
"Name": "圣光之帽",
173
"Icon": "圣光之帽",
174
"InventoryType": "Equip",
175
"EquipType": "Helm",
176
"Price": "4000",
177
"StartLevel": "5",
178
"Quailty": "4",
179
"Damage": "350",
180
"Hp": "3000",
181
"Power": "150",
182
"Des": "火焰之王,拉格纳罗斯居住在火焰位面,被黑铁矮人召唤所召唤。他所踏足之地,赤脊山脉因此毁灭,形成了黑石山与熔火之心。"
183
},
184
{
185
"Id": "1014",
186
"Name": "生命之环",
187
"Icon": "生命之环",
188
"InventoryType": "Equip",
189
"EquipType": "Bracelet",
190
"Price": "4500",
191
"StartLevel": "5",
192
"Quailty": "4",
193
"Damage": "450",
194
"Hp": "1000",
195
"Power": "500",
196
"Des": "在土灵和铁矮人之间爆发的第一次战争中,瓦兰奈尔碎裂了。据信这把武器的残片已在战争中遗失。"
197
},
198
{
199
"Id": "1015",
200
"Name": "魔音护魂魔杖",
201
"Icon": "魔音护魂魔杖",
202
"InventoryType": "Equip",
203
"EquipType": "Weapon",
204
"Price": "7500",
205
"StartLevel": "5",
206
"Quailty": "4",
207
"Damage": "1000",
208
"Hp": "100",
209
"Power": "900",
210
"Des": "凯尔萨斯:“你看,我的收藏中有许多武器。” 背景出处不详。"
211
},
212
{
213
"Id": "1016",
214
"Name": "死亡挂坠",
215
"Icon": "死亡挂坠",
216
"InventoryType": "Equip",
217
"EquipType": "Necklace",
218
"Price": "3500",
219
"StartLevel": "5",
220
"Quailty": "4",
221
"Damage": "500",
222
"Hp": "500",
223
"Power": "420",
224
"Des": "灵魂收割者的名号是由于这把剑在每杀死一个人之后都会吸取他们的灵魂,加强自己的暗影力量。"
225
},
226
{
227
"Id": "1017",
228
"Name": "小体力丹",
229
"Icon": "小体力丹",
230
"InventoryType": "Drug",
231
"Price": "1000",
232
"ApplyValue": "2000"
233
},
234
{
235
"Id": "1018",
236
"Name": "大体力丹",
237
"Icon": "大体力丹",
238
"InventoryType": "Drug",
239
"Price": "3000",
240
"ApplyValue": "5000"
241
},
242
{
243
"Id": "1019",
244
"Name": "黄金宝箱",
245
"Icon": "黄金宝箱",
246
"InventoryType": "Box",
247
"Price": "10000"
248
}
249
]
2、我们要新建一个类用来存储JSON文本中所有的键
1
using System.Collections;
2
using System.Collections.Generic;
3
using UnityEngine;
4
5
public class Inventory {
6
public int Id;
7
public string Name;
8
public string Icon;
9
public string InventoryType;
10
public string EquipType;
11
public int Price;
12
public int StartLevel;
13
public int Quailty;
14
public int Damage;
15
public int Hp;
16
public int Power;
17
public string Des;
18
public Inventory() { }
19
}
3、在另一个脚本中解析Json
1
using UnityEngine;
2
using System.Collections;
3
4
public class GM : MonoBehaviour
5
{
6
//存放了所有的inventory的属性
7
public static Inventory[] inventory;
8
const string addressInventory = "data/Inventory";
9
public static bool isFirst = true;
10
11
void Awake()
12
{
13
if (isFirst)
14
{
15
isFirst = false;
16
inventory = JsonDataTool.AddressToClasses<Inventory>(addressInventory);
17
}
18
}
19
20
void Start()
21
{
22
foreach (Inventory p in inventory)
23
{
24
if (p.Name == "小体力丹")
25
{
26
Debug.Log(p.Id);
27
}
28
if (p.Id==1001)
29
{
30
Debug.Log(p.Name);
31
}
32
}
33
}
34
}
将脚本挂在场景中
输出如下
阅读全文
0 0
- Unity利用JsonFX解析Json格式文本
- Unity 使用JsonFx解析本地json数据
- Unity使用JsonFx进行JSON (反)序列
- 【json】JsonFX
- Boost解析json格式文本
- Boost解析json格式文本
- 利用NSJSONSerialization解析Json格式
- 将文本内容解析成json格式
- 利用fastjson解析大文本JSON
- Unity解析Txt文本
- unity 解析歌词文本
- Unity使用JsonFX插件进行序列化
- Unity JavaScript 解析json
- Unity Json解析
- Unity 解析Json字符串
- java解析json文本
- 文本数据交换格式:JSON
- 【JSON】解析JSON格式异常
- 向Revit中批量导入运维信息
- Android studio修改图标/android 修改图标
- Android可设置结果的Loading
- maven,编译,代码过长
- 判断AngularJS渲染页面完成
- Unity利用JsonFX解析Json格式文本
- 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
- getpagesize()函数
- bootstrap-table合并单元格组合表头
- 使用反射对Servlet请求进行转发
- PostMan使用教程二 在test suite中运行test case
- 比特币深层技术原理浅析
- Java 变量类型
- 嵌入式学习9(Linux gcc gdb mkfile)