Unity -- Json文件读取

本文介绍如何在Unity中使用LitJSON进行JSON文件的读取与解析,并通过具体实例展示了如何将JSON数据转换为C#对象,适用于游戏开发场景。

JSON官网
下载”c#/LitJSON. “, 将LitJson.dll拖到unity中”Assets/Plugins”文件夹.

JSON在线编辑器
编辑/校对json文件. 感觉比较好用的一个编辑器.

[测试用Json文件 – Info.json]

[
    {  "id": 0,  "name": "行尸走肉", "optionArray": [   {"num": 0,"str": "shit 1!"},    {"num": 1,"str": "shit 2!"},    {"num": 2,"str": "shit 3!"}],"position":{"x":1,"y":1}},
    {  "id": 1,  "name": "金蝉脱壳", "optionArray": [   {"num": 0,"str": "shit 1!"},    {"num": 1,"str": "shit 2!"},    {"num": 2,"str": "shit 3!"}],"position":{"x":2,"y":1}},
    {  "id": 2,  "name": "百里挑一", "optionArray": [   {"num": 0,"str": "shit 1!"},    {"num": 1,"str": "shit 2!"},    {"num": 2,"str": "shit 3!"}],"position":{"x":3,"y":1}},
    {  "id": 3,  "name": "金玉满堂", "optionArray": [   {"num": 0,"str": "shit 1!"},    {"num": 1,"str": "shit 2!"},    {"num": 2,"str": "shit 3!"}],"position":{"x":4,"y":1}},
    {  "id": 4,  "name": "背水一战", "optionArray": [   {"num": 0,"str": "shit 1!"},    {"num": 1,"str": "shit 2!"},    {"num": 2,"str": "shit 3!"}],"position":{"x":5,"y":1}},
    {  "id": 5,  "name": "霸王别姬", "optionArray": [   {"num": 0,"str": "shit 1!"},    {"num": 1,"str": "shit 2!"},    {"num": 2,"str": "shit 3!"}],"position":{"x":6,"y":1}}
]

[Json读取类 – JsonIO.cs]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using LitJson;

//Json读写 -----------------------------------------
public class JsonIO
{
    //Json文件读取
    static public List<TestData> LoadJsonFromFile(string path)
    {
        //检查文件是否存在 -- 否:返回null.
        if (!File.Exists (path)) {
            Debug.LogWarning ("[ 文件不存在! 取消读取操作! ]  文件读取路径 : " + path );
            return null;
        }

        //读取Json文件.
        //当前的json文件是一个数组.所以使用了<List<TestData>>来读取.
        //根据使用的数据类型<T>值可以是任何类型.相应返回值做一些修改即可.非常方便.
        return JsonMapper.ToObject<List<TestData>> (new JsonReader (File.ReadAllText (path)));
    }
}

//测试数据 -----------------------------------------

//测试数据 -- string/int/Array/Vector3(实际数据保存的是Vector2)
[SerializeField]
public class TestData{
    public string name{ get; set;}
    public int id{ get; set;}
    public Option[] optionArray{ get; set;}
    public Vector3 position{ get; set;}

    public override string ToString ()  {
        string str = string.Empty;
        str = string.Format("[ TestData: name={0}, id={1} ], position={2}", name, id, position.ToString()) + "\n";
        foreach (var temp in optionArray) {
            str += temp.ToString () + "\n";
        }
        return str;
    }
}

[SerializeField]
public class Option{
    public int num{ get; set;}
    public string str{ get; set;}

    public override string ToString ()  {
        return string.Format ("<Option> : num = {0}, str = {1}",num, str);
    }
}
// -----------------------------------------

[调用 – JsonExample.cs]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class JsonExample : MonoBehaviour 
{
    public Text _text;  //创建一个UGUI控件 -- 用来显示读取到的文件
    private List<TestData> _list;   //保存读取的数据
    private string _filePath;   //Json文件路径<Assets/Datas/Resources/Info.json>

    //初始化
    void Start()
    {
        _text.text = string.Empty;
        _filePath = Application.dataPath + "/Datas/Resources/Info.json";
    }

    //每帧调用
    void Update () 
    {
        //按下鼠标左键 -- 设置Text
        if (Input.GetMouseButtonDown (0)) 
        {
            //读取Json文件到列表.
            _list = JsonIO.LoadJsonFromFile (_filePath);

            //按元素读取数据.
            foreach (var temp in _list) {
                _text.text += temp.ToString ();

                //创建测试物体 && 设置物体position.
                var go = new GameObject (temp.name);
                go.transform.position = new Vector2 (temp.position.x, temp.position.y);
            }
        }

        //按下鼠标右键 -- 清空Text
        if (Input.GetMouseButtonDown (1)) 
        {
            _text.text = string.Empty;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值