Json格式与解析(二)

Json在Unity中的用法



前言

可能很多小白也是第一次接触到Json,对于Json到底是个什么也没搞清楚,网上有很多讲义去讲解这个Json的,本文在这里就不再赘述,大家可以自行百度搜索,如果对于Json的语法格式不了解的可以参考我这篇博客Json格式与解析在这篇博客中我讲解了Json的语法格式以及他的主要使用方式,大家可以参考一下。本次主要讲解Json在Unity中的用法与解析,我会通过案例来讲解我们在Unity中是怎样存储Json的,并且存储完的Json我们是怎样读取的。
本篇文章主要使用LitJson,LitJson的下载地址点这里


提示:以下是本篇文章正文内容,下面案例可供参考

一、Unity中最常用的Json格式都有哪些?

在unity中最常用的Json存储主要有两个方法,第一中就是LitJson这个插件,第二个就是JsonUnility,这个JsonUnility是Unity根据Json存储的格式自己创建出来的一个类,对于少量的数据存储用JsonUnility这个方式还是很方便的。而LitJson常用来进行大数据的处理,性能要比JsonUnility好很多,但是LitJson有个缺点就是在有的Unity版本中会出现中文字符转换不成功,主要还是LitJson的编码方式是UniCode,在这篇文章中我也会教大家如何转换成正确的格式。

二、LitJson导入Unity

1.首先按照上文前言中的LitJson下载地址下载LitJson

1——LitJson下载完成过后我们打开下载好的文件,文件里只有一个文件,dll文件要放在Plugins文件夹下,代码访问时要引用命名空间:using LitJson。此时我们要打开Unity界面,在Assets文件下新建一个文件夹并命名为Plugins,然后返回我们下载好的文件夹直接拖拽到该文件夹下即可。接下来就给大家讲解一下我们的具体使用方法。

2.LitJson存储数据

1——首先我们新建一个类用来单独存储我们的数据,包括我们常见的name,age,address等这些数据。

代码如下(示例):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[SerializeField]
public class StudentClass 
{
    
    
    public string _name;
    public string _address;
    public int _age;
}

上边的这些信息单独写了一个类用来表示这些信息,所以我们不用继承MonoBehaviour,同时我们也用不到Start和Update函数。这个类必须要加[SerializeField]才可以使得这个类变为可编辑得参数。

2——在unity中我们设置几个InputField用来在unity中接收我得这些参数得值

在这里插入图片描述

大家可以像我一样设置这些信息,主要就是我们在InputField中输入信息,然后我们点击提交信息就可以实现存储。点击读取信息我们就可以在上边得文本框中显示我们刚才存储得信息。主要得思路就是这样,大家也可以按照自己得思路来设置,其最主要得存储过程按照我的这样来就行。
当然大家也要在UsingLitjson脚本中设置一下这些InputField变量,然后把这个脚本挂在我们自己新建得空物体对象GameManger上,再把我们刚才给新建的这些InputField给拖拽上,展示如下图
在这里插入图片描述

这样我们就可以开始我们的存储过程了

扫描二维码关注公众号,回复: 14923132 查看本文章

3——下边开始编写我们LitJson存储方式

首先要新建一个类命名为UsingLitJson,在该类中我们要先引用一下LitJson的命名空间Using LitJson ,还要引入一下我们的UI命名空间,代码如下图

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

public class UsingLitJson : MonoBehaviour
{
    
    
    public StudentClass studentClass;
    public InputField inputFieldName;
    public InputField inputFieldAge;
    public InputField inputFieldAddress;
    public Text readMassagetext;
    private JsonData jsonData;

    /// <summary>
    /// 给提交按钮添加事件
    /// </summary>
	public void UsingJson()
    {
    
    
        studentClass = new StudentClass();
        studentClass._name = inputFieldName.text;
        studentClass._age = int.Parse(inputFieldAge.text);
        studentClass._address = inputFieldAddress.text;
        jsonData = JsonMapper.ToJson(studentClass);
       Debug.Log(jsonData);
    }
    /// <summary>
    /// 给读取按钮添加事件
    /// </summary>
    public void ReadJson()
    {
    
    
        readMassagetext.text = jsonData.ToString();
    }
}

4——给提交按钮添加事件

在这里插入图片描述

5——给读取按钮添加事件

在这里插入图片描述

6——运行查看效果

首先输入信息点击提交按钮查看存储信息正确与否
在这里插入图片描述
大家可以从这看到信息已经正确存储只不过中文没有正确转换过去。
再来看一下读取信息
在这里插入图片描述
信息也正确读取出来。接下来我们看一下怎么设置这个中文转码

7——中文转换格式

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

public class UsingLitJson : MonoBehaviour
{
    
    
    public StudentClass studentClass;
    public InputField inputFieldName;
    public InputField inputFieldAge;
    public InputField inputFieldAddress;
    public Text readMassagetext;
    private JsonData jsonData;

    /// <summary>
    /// 给提交按钮添加事件
    /// </summary>
	public void UsingJson()
    {
    
    
        studentClass = new StudentClass();
        studentClass._name = inputFieldName.text;
        studentClass._age = int.Parse(inputFieldAge.text);
        studentClass._address = inputFieldAddress.text;
        jsonData = JsonMapper.ToJson(studentClass);

        string listJson = jsonData.ToString();
        System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"(?i)\\[uU]([0-9a-f]{4})");//正则表达式规定格式
        var ss = reg.Replace(listJson,
        delegate (System.Text.RegularExpressions.Match m)
        {
    
    
            return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString();
        });
        Debug.Log(ss);
        
    }
    /// <summary>
    /// 给读取按钮添加事件
    /// </summary>
    public void ReadJson()
    {
    
    
        readMassagetext.text = jsonData.ToString();
    }
}

在原来的基础上添加了这一段代码就可以直接把中文转换成功。

string listJson = jsonData.ToString();
        System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"(?i)\\[uU]([0-9a-f]{4})");//正则表达式规定格式
        var ss = reg.Replace(listJson,
        delegate (System.Text.RegularExpressions.Match m)
        {
    
    
            return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString();
        });

总结

提示:这里对文章进行总结:

本文主要简单讲解了一下LitJson存储信息得过程,同时我们也还可以把这些信息直接写入到我们的文件中等等操作都是可以实现得。下期给大家讲解如和存储到文件中,并在文件中去读取我们的信息。

猜你喜欢

转载自blog.csdn.net/m0_45244541/article/details/123939101
今日推荐