当前位置:   article > 正文

Unity读取和解析JSON文件(1)-JSON和对象的转换_unityjson解析赋值给对象

unityjson解析赋值给对象
  • Unity版本:2018.4.17
  • LitJson:几乎适用于Unity所有版本 (下载地址

JSON是一种轻量级的文本数据格式,跟语言和平台无关,在项目中使用非常广泛。不过Unity引擎和C#语言本身并没有针对JSON提供太方便的使用接口,幸好Unity插件商店里可以找到很多。其中的LitJSON就是一个流行的Unity插件,可以方便、快速地进行JSON和对象之间的转换。

安装

LitJSON插件是一个Dll文件,在工程Assets下新建一个Plugins目录,右键"Import New Asset"把LitJSON.dll导入,然后在调用代码处引入它的命名空间

using LitJSON;
  • 1

即可开始使用了。

JSON和对象的转换

LitJSON有个JsonMapper类,该类为实现JSON -> 对象对象->JSON的转换提供了两个主要方法,JsonMapper.ToObjectJsonMapper.ToJson

JSON文件 -> 对象

例如,以下一个JSON文件,如何应用在项目中呢?

{
	"Age"	: 57,
	"Name"	: "iam bill"
}
  • 1
  • 2
  • 3
  • 4

自然地,我们会想到首先要加载该文件,并创建类对象,然后根据文件内容给对象赋值,之后该对象就可以使用了。

现在先把类定义出来,类名为 Person

public class Person 
{
    public int Age { get; set; }
    public string Name { get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5

可以看到,类的成员和JSON内容一一对应,这样才能互相转换。

而JSON文件的加载,Unity引擎提供了 Resources.Load 方法。

假设该JSON文件名为bill.json,存放路径为 Assets/Resources/bill.json,则加载且转换为Person对象的代码如下。

// 读取JSON文件并转换成Person对象
// bill.json 文件放在 Assets/Resources 路径下
void JsonFileToPerson()
{
    TextAsset text = Resources.Load<TextAsset>("bill"); // 以文本方式加载
    Person bill = JsonMapper.ToObject<Person>(text.text);
    Debug.LogFormat("JsonFileToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出Log如下

JsonFileToPerson: Age=57, Name=iam bill
  • 1
JSON字符串 -> 对象

上一段讲了如何把JSON文件转换为对象。那如果是一个字符串,如何转换为对象呢?示例代码如下。

// 把JSON字符串转换成Person对象
void JsonStrToPerson() 
{
    string jsonStr = @"
        {
            ""Age""     : 57,
            ""Name""    : ""iam bill""
        }";
    Person bill = JsonMapper.ToObject<Person>(jsonStr);
    Debug.LogFormat("JsonStrToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

输出Log如下

JsonStrToPerson: Age=57, Name=iam bill
  • 1
对象 -> JSON字符串

把对象转换为JSON字符串

// 把Person对象转成JSON字符串
void PersonToJsonStr() 
{
    Person bill = new Person();
    bill.Age = 57;
    bill.Name = "iam bill";
    string jsonStr = JsonMapper.ToJson(bill);
    Debug.LogFormat("PersonToJsonStr: json={0}", jsonStr);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

最后,本文的所有完整代码如下:

using UnityEngine;
using LitJson;

public class Person 
{
    public int Age { get; set; }
    public string Name { get; set; }
}

public class TestJson : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        JsonStrToPerson();
        JsonFileToPerson();
        PersonToJsonStr();
    }

    // 把JSON字符串转换成Person对象
    void JsonStrToPerson() 
    {
        string jsonStr = @"
            {
                ""Age""     : 57,
                ""Name""    : ""iam bill""
            }";
        Person bill = JsonMapper.ToObject<Person>(jsonStr);
        Debug.LogFormat("JsonStrToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
    }

    // 读取JSON文件并转换成Person对象
    // bill.json 文件放在 Assets/Resources 路径下
    void JsonFileToPerson()
    {
        TextAsset text = Resources.Load<TextAsset>("bill");
        Person bill = JsonMapper.ToObject<Person>(text.text);
        Debug.LogFormat("JsonFileToPerson: Age={0}, Name={1}", bill.Age, bill.Name);
    }

    // 把Person对象转成JSON字符串
    void PersonToJsonStr() 
    {
        Person bill = new Person();
        bill.Age = 57;
        bill.Name = "iam bill";
        string jsonStr = JsonMapper.ToJson(bill);
        Debug.LogFormat("PersonToJsonStr: json={0}", jsonStr);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/123418
推荐阅读
相关标签
  

闽ICP备14008679号