1.3 Json案例:使用Unity解析上述复合JSON
前言
通过本篇博客,我会和大家通过一个案例来学习Json的操作,希望本篇博客能为大家的工作过程中带来一些帮助与启发。
1.3.1 分析JSON值
首先我们需要分析上述JSON文档都有什么,根据规则分析出它包含以下值:
- 对象
- 字符串
- 数字
- 数组
但是此JSON文档中是多层嵌套关系,对象包含对象,数组包含对象,对象包含数组,这样我们解析下来会很麻烦,但是同时,如果我们将这个JSON文档也解析出来了那我们以后解析各种各样不同复杂程度的JSON文档都不在难倒我们
根据以上JSON文档内容我们可以开发背包装备查看DEMO,由于是DEMO级的,在这里面我们不会对其界面UI进行深入开发,着重开发的还是本章的重点内容解析JSON 。
1.3.2 解析JSON前准备
首先我们将以上JSON文档保存并放在我们工程的Resources>文件目录下,将其命名为“Unity精品专栏之序列化操作之JSON实例”>
再次我们需要在Plugins文件中引入LitJson.dll文件,这个动态库会帮助我们解析JSON文档
最后我们需要借助网上的一个功能“JSON转C#实体类”这是我自己使用的一个网站:https://www.sojson.com/json2csharp.html
将我们的JSON文档复制进去点击生成实体即可,并将结果复制出来为以后解析做准备。
OK,接下来我们要回到Unity中,在Scripts中新建一个文件夹Json并在里面创建代码命名为“JsonDatabase”,并将我们刚在外部网站上生成的实体类复制进去即可。
代码如下:
public class GetPosition
{
/// <summary>
///
/// </summary>
public double lat { get; set; }
/// <summary>
///
/// </summary>
public double lng { get; set; }
}
public class ElementsItem
{
/// <summary>
///
/// </summary>
public int id { get; set; }
/// <summary>
/// 无影剑-艾雷诺
/// </summary>
public string name { get; set; }
/// <summary>
/// Json/Equip/无影剑-艾雷诺
/// </summary>
public string icon { get; set; }
/// <summary>
///
/// </summary>
public int count { get; set; }
/// <summary>
///
/// </summary>
public GetPosition getPosition { get; set; }
/// <summary>
///
/// </summary>
public string hasShell { get; set; }
/// <summary>
/// 史诗
/// </summary>
public string quality { get; set; }
/// <summary>
///
/// </summary>
public int price { get; set; }
/// <summary>
/// DNF中史诗装备
/// </summary>
public string infomation { get; set; }
}
public class SearchDataItem
{
/// <summary>
///
/// </summary>
public List<ElementsItem> elements { get; set; }
/// <summary>
///
/// </summary>
public string type { get; set; }
/// <summary>
/// 热门装备
/// </summary>
public string title { get; set; }
}
public class Data
{
/// <summary>
///
/// </summary>
public List<SearchDataItem> searchData { get; set; }
/// <summary>
///
/// </summary>
public string dateTime { get; set; }
}
public class Root
{
/// <summary>
/// Unity精品专栏之序列化Json操作Json
/// </summary>
public string project { get; set; }
/// <summary>
///
/// </summary>
public string projectTime { get; set; }
/// <summary>
///
/// </summary>
public Data data { get; set; }
}
但是实体代码复制过来了不能说明我们能马上使用,在这里我们在来分析一下我们的Json文档:
我们可以看出在文档中我们有以下的数据不需要解析:
- project
- projectTime
- dateTime
所以排除下来我们需要解析的仅仅只有searchData。
由此我们需要根据我们的分析结构修改我们的实体类,代码如下:
namespace XIAOXIAOUnity.Serialize.Json
{
/*
* / <summary>
* / Author:xiaoxiaoUnity
* / data:2021.01.08
* / Json解析后数据储存类
* / </summary>
*/
public class JsonDatabase
{
/*
* / <summary>
* / 坐标
* / </summary>
*/
public class Location
{
/*
* / <summary>
* /
* / </summary>
*/
public double Lat {
get; set;
}
/*
* / <summary>
* /
* / </summary>
*/
public double Lng {
get; set;
}
public Location( double lat, double lng )
{
this.Lat = lat;
this.Lng = lng;
}
}
/*
* / <summary>
* / 装备信息
* / </summary>
*/
public class ElementsItem
{
/*
* / <summary>
* /
* / </summary>
*/
public int Id {
get; set;
}
/*
* / <summary>
* /
* / </summary>
*/
public string Name {
get; set;
}
/*
* / <summary>
* /
* / </summary>
*/
public string Icon {
get; set;
}
/*
* / <summary>
* /
* / </summary>
*/
public int count {
get; set;
}
/*
* / <summary>
* /
* / </summary>
*/
public Location Location {
get; set;
}
/*
* / <summary>
* /
* / </summary>
*/
public string HasSell {
get; set;
}
/*
* / <summary>
* /
* / </summary>
*/
public string Quailty {
get; set;
}
/*
* / <summary>
* /
* / </summary>
*/
public string Infomation {
get; set;
}
public int Price {
get; set;
}
/*
* / <summary>
* / 构造函数
* / </summary>
* / <param name="id"></param>
* / <param name="name"></param>
* / <param name="icon"></param>
* / <param name="vis"></param>
* / <param name="location"></param>
* / <param name="has"></param>
* / <param name="info"></param>
* / <param name="quality"></param>
* / <param name="price"></param>
*/
public ElementsItem( int id, string name, string icon, int vis, Location location, string has, string info, string quality, int price )
{
this.Id = id;
this.Name = name;
this.Icon = icon;
this.count = vis;
this.Location = location;
this.HasSell = has;
this.Infomation = info;
this.Quailty = quality;
this.Price = price;
}
}
}
}
到此我们的准备工作才算完成,接下来我们要正式开始对以上JSON进行开发。