unity 本地使用Json(全套)

提示:文章有错误的地方,还望诸位大神不吝指教!

文章目录


前言

今天聊一聊怎么使用Json,从怎么编辑Json内容到代码里得到并使用Json。

手把手教学,看完本章节即会完整的使用流程!

一、Json是什么?

JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式,主打一个便捷好用。

平时用到比较多的都是解析Json和往Json中添加数据、修改数据等。

序列化:将Java对象数据转换成JSON字符串数据

反序列化:将JSON字符串数据转换成Java对象数据

二、创建Json文件

1.在线编辑并转实体类(C#)

链接: JSON转C#实体类

打开这个网站进行编辑即可,不知道格式点击"来个Json试试",就会出现实例Json

编辑好后点击"生成实体类",复制到C#类里就可以了

得到C#类:Root(类名是默认这个,可以修改)

2.Json文件

链接: Json在线编辑

Json文件:就是你编辑的这个,放在特殊文件夹里:StreamingAssets

得到Json文件:content.json(文件名是默认这个,可以修改)

三、解析Json并使用

注意点:类名和Json名 必须和你上面步骤创建的分别保持一致

csharp 复制代码
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using Twq;
using LitJson;
/// <summary>
/// Json管理
/// </summary>
public class JsonManage : SingletonMono<JsonManage>
{
    protected override void Awake()
    {
        base.Awake();
        StartCoroutine(GetInfoDataJson01());
    }

    /// <summary>
    /// 
    /// </summary>
    /// <returns></returns>
    private IEnumerator GetInfoDataJson01()
    {
        UnityWebRequest webRequest = UnityWebRequest.Get(Application.streamingAssetsPath + "/Json/PhoneticText.json");
        yield return webRequest.SendWebRequest();
        if (webRequest.isHttpError || webRequest.isNetworkError)
            Debug.Log(webRequest.error);
        else
        {

            Root test = LitJson.JsonMapper.ToObject<Root>(webRequest.downloadHandler.text);
            Debug.Log("json=" + test.PhoneticText[0].TaskIntroduction);

            //全局变量 存储
            GlobalVariable.PhoneticTextJson= LitJson.JsonMapper.ToObject<Root>(webRequest.downloadHandler.text);
           
            Debug.Log("json=" + GlobalVariable.PhoneticTextJson.PhoneticText[0].TaskIntroduction);

        }
    }
    IEnumerator GetData()
    {

        UnityWebRequest request = UnityWebRequest.Get("http://www.wotimadeyebuzhidudizhishisha.com");
        yield return request.SendWebRequest();
        if (request.isNetworkError || request.isHttpError)
        {
            Debug.Log(request.error);
        }
        else
        {
            Debug.Log(request.downloadHandler.text);
            JsonData objs = JsonMapper.ToObject(System.Text.Encoding.UTF8.GetString(request.downloadHandler.data, 3, request.downloadHandler.data.Length - 3));
            Debug.Log(objs.ToJson());
        }
    }
}

四、报错:JsonError:JsonException: Invalid character '' in input string

单看报错信息基本上都是Json 的错误,我么可能会去查找json格式的错误,但是如果你照做了。

你会发现,json文本格式没有错误。

错误的真正原因是UTF-8BOM。

BOM------Byte Order Mark,就是字节序标记UTF-8文件中放置BOM主要是微软的习惯,但是放在别的系统上会出现问题。不含BOM的UTF-8才是标准形式,UTF-8不需要BOM带BOM的UTF-8文件的开头会有U+FEFF,所以新建的空文件会有3字节的大小。

出现这种原因是我使用代码去创建Json文件导致。

为了避免这种格式的文档我们可以通过设置UTF8Encoding 的构造函数参数,为false使用无BOM格式的文档。

简单来说创建Json文件的时候注意,别自己随意创建,然后修改后缀。

我提供一个正确的Json文件,你们替换里面的内容即可:链接: 正确的Json文件

总结

好记性不如烂笔头!

相关推荐
小贺儿开发10 小时前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
淡海水10 小时前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
小小数媒成员1 天前
UGUI 性能优化(详细,全,深入)
开发语言·unity·游戏引擎
林川~012 天前
Unity新输入系统使用笔记
unity·input system
小贺儿开发2 天前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字
天若有情6732 天前
独立开发复盘:我用 Node.js 做了个在线工具箱
前端·json·工具
goujunwe2 天前
GEO 评估方法:如何自测你的内容,会不会被 AI 引用
搜索引擎·网络安全·游戏引擎·全文检索·中文分词
林川~012 天前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
Asurplus3 天前
【SpringBoot4】3、从SpringBoot4升级Sa-Token1.46.0报错
redis·sa-token·json·jackson·springboot4
代码中介商3 天前
C++ 预约系统实战(三):服务端实现——libevent 事件驱动与业务路由
c++·json·c/s