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名 必须和你上面步骤创建的分别保持一致


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文件

总结

好记性不如烂笔头!

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Unity 中可以使用 .NET 的 System.Json 命名空间来处理 JSON。您可以使用 JsonDocument 类来解析 JSON 字符串,然后使用 JsonElement 类来访问 JSON 元素。 例如,下面的代码演示了如何解析一个包含数组的 JSON 字符串: ``` string jsonString = "{\"array\":[1,2,3,4,5]}"; JsonDocument json = JsonDocument.Parse(jsonString); JsonElement array = json.RootElement.GetProperty("array"); foreach (var element in array.EnumerateArray()) { Console.WriteLine(element.GetInt32()); } ``` 如果您想将 JSON 序列化为 C# 对象,您可以使用 JsonSerializer 类。例如: ``` string jsonString = "{\"name\":\"John Smith\",\"age\":30,\"city\":\"New York\"}"; Person person = JsonSerializer.Deserialize<Person>(jsonString); Console.WriteLine($"Name: {person.Name}, Age: {person.Age}, City: {person.City}"); ``` 其中,Person 是一个包含 name、age 和 city 属性的类。 希望这能帮到您。 ### 回答2: 在Unity使用JSON有几个步骤: 1. 创建一个包含JSON数据的字符串。可以手动创建字符串,也可以从外部文件中读取。 2. 创建一个可以将JSON字符串解析为对象的类。可以使用JsonUtility类中的相关方法进行解析。需要确保类的属性与JSON数据的键名完全匹配。 3. 将JSON字符串传递给JsonUtility类的相关方法,将其解析为对象。可以使用JsonUtility.FromJson()方法将JSON字符串解析为对象。解析完成后,可以使用对象的属性来访问JSON中的数据。 4. 将数据从对象中提取出来并在Unity使用。可以使用对象的属性和方法,来获取和处理JSON数据。 下面是一个简单的示例: 首先,创建一个包含JSON数据的字符串: ``` string json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; ``` 然后,创建一个可以将JSON字符串解析为对象的类: ```csharp [System.Serializable] public class Person { public string name; public int age; public string city; } ``` 接下来,将JSON字符串解析为对象: ```csharp Person person = JsonUtility.FromJson<Person>(json); ``` 最后,可以通过对象的属性来访问JSON中的数据: ```csharp Debug.Log("Name: " + person.name); Debug.Log("Age: " + person.age); Debug.Log("City: " + person.city); ``` 这样就可以在Unity使用JSON数据了。需要注意的是,UnityJsonUtility类对于复杂的JSON结构或嵌套对象可能不够灵活,如果遇到这种情况,可以考虑使用第三方库如Newtonsoft.Json来解析和处理JSON。 ### 回答3: Unity使用JSON可以通过Unity自带的JsonUtility类来实现。 首先,需要引入命名空间 `using System.IO;` 和 `using UnityEngine;`。 然后,我们可以使用JsonUtility类的静态方法`JsonUtility.FromJson()`来将JSON字符串转换为对象,或使用`JsonUtility.ToJson()`将对象转换为JSON字符串。 例如,假设我们有一个名为`Player`的类,它有两个属性`name`和`score`: ```csharp [System.Serializable] public class Player { public string name; public int score; } ``` 我们可以将一个`Player`对象转换为JSON字符串: ```csharp Player player = new Player(); player.name = "Tom"; player.score = 100; string json = JsonUtility.ToJson(player); ``` 我们也可以将JSON字符串转换为`Player`对象: ```csharp string json = "{\"name\":\"Tom\",\"score\":100}"; Player player = JsonUtility.FromJson<Player>(json); ``` 注意,在使用`JsonUtility.FromJson()`方法时,需要确保类的属性名与JSON字符串中的键名一致。 此外,还可以使用`JsonUtility.FromJsonOverwrite()`方法将JSON字符串的值直接覆盖到已存在的对象上,而不是创建新的对象。 综上所述,Unity使用JSON,我们可以通过JsonUtility类来进行对象与JSON字符串的相互转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野区捕龙为宠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值