Unity之Json读取写入

这篇具有很好参考价值的文章主要介绍了Unity之Json读取写入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Json简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于传送数据。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

一般用于数据交互,服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)

二、Json数据组成

Json一般分为int、bool、string、Double、数组五种。其中数组可以直接用[0,1,2,3]方式表示,数组中也可以包含json嵌套。

{
  "IntValue":123,
  "BoolValue":true,
  "StringValue": "这是String类型值,必须要用引号",
  "DoubleValue": 123.456,
  "ArrayDouble": [ 0, 338, 115 ],

  "ArrayString": [
    {
      "ArrayName": "这是数组类型的json格式",
      "ArrayDouble": 7.89
    },
    {
      "ArrayName": "这是数组类型的json格式2",
      "ArrayDouble": 1.23
    }
  ]
}

手动写的Json可以用下面的解析工具测试对错 

JSON在线 | JSON解析格式化—SO JSON在线工具

unity读写json文件,unity,json,游戏引擎

unity读写json文件,unity,json,游戏引擎

三、Json控制器

用于读取、保存json数据,其中还包含了json数据类用于转换。

using System.IO;
using UnityEngine;
using System;


[Serializable] //一定要序列化
public class JsonBaseData
{
    public int IntValue;
    public bool BoolValue;
    public string StringValue;
    public double DoubleValue;
    public double[] ArrayDouble;//数值数组
    public ArrayString[] ArrayString;//json嵌套数组
}

[Serializable] //一定要序列化
public class ArrayString
{
    public string ArrayName;
    public double ArrayDouble;
}

public class JsonController
{
    #region 获取Json数据文件

    public string GetTextForStreamingAssets(string fileName)
    {
        string jsonPath;
        if (Application.platform == RuntimePlatform.Android)
            jsonPath = Application.persistentDataPath + "/" + fileName;
        else
            jsonPath = Application.streamingAssetsPath + "/" + fileName;

        string data = File.ReadAllText(jsonPath);
        //Debug.Log("获取Json数据文件: " + data);
        return data;
    }

    #endregion

    #region 存储json数据
    /// <summary>
    /// 存储json数据
    /// </summary>
    /// <param name="jsonData">json数据类</param>
    /// <param name="fileName">json文件名称</param>
    public void SaveJsonData(object jsonData, string fileName)
    {
        string jsonPath;

        if (Application.platform == RuntimePlatform.Android)
            jsonPath = Application.persistentDataPath + "/" + fileName; //安卓存储
        else
            jsonPath = Application.streamingAssetsPath + "/" + fileName; //pc存储

        if (File.Exists(jsonPath))
        {
            byte[] byteData = System.Text.Encoding.Default.GetBytes(JsonUtility.ToJson(jsonData, true));
            File.WriteAllBytes(jsonPath, byteData);
        }
    }
    #endregion

}

四、Json使用方式

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

public class JsonTest : MonoBehaviour
{
    string value;
    JsonBaseData data;
    JsonController jsonController;
    void Start()
    {
        jsonController = new JsonController();
        //Debug.Log("读取的Json字符串:"+jsonController.GetTextForStreamingAssets("Config.json"));
        data = JsonUtility.FromJson<JsonBaseData>(jsonController.GetTextForStreamingAssets("Config.json"));

        Debug.Log("IntValue: " + data.IntValue);
        Debug.Log("BoolValue: " + data.BoolValue);
        Debug.Log("StringValue: " + data.StringValue);
        Debug.Log("DoubleValue: " + data.DoubleValue);

        #region 输出ArrayDouble

        value = "[";
        for (int i = 0; i < data.ArrayDouble.Length; i++)
        {
            if (i == 0)
                value += $"{data.ArrayDouble[i]}";
            else
                value += $",{data.ArrayDouble[i]}";

        }
        Debug.Log("ArrayDouble: " + value + "]");

        #endregion

        #region 输出ArrayString
        value = "";
        for (int i = 0; i < data.ArrayString.Length; i++)
        {
            if (i == 0)
            {
                value += $"[\"ArrayName\":{data.ArrayString[i].ArrayName}," +
                    $"\"ArrayDouble\":{data.ArrayString[i].ArrayDouble}]";
            }
            else
            {
                value += $",[\"ArrayName\":{data.ArrayString[i].ArrayName}," +
                    $"\"ArrayDouble\":{data.ArrayString[i].ArrayDouble}]";
            }
        }

        Debug.Log("ArrayString: " + value);

        #endregion

    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            data.StringValue = "修改保存后的json值";
            jsonController.SaveJsonData(data, "Config.json");

        }
    }
}

五、动态Json字段属性转换 

如果我们的Json字段属性是动态添加的不是固定长度可以使用using Newtonsoft.Json.Linq;中的JObject属性。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json.Linq;

public class JsonTest2 : MonoBehaviour
{
    string jsonStr="{}";
    JsonController jsonController;

    void Start()
    {
        #region 数组转换
        //jsonStr = "{\"数组1\":[0,1,2],\"数组2\":[0,1,2]}";
        //JObject data = JObject.Parse(jsonStr);
        //Debug.Log(data["数组1"]); //1.直接打印
        //JArray itemsArray = (JArray)data["数组1"];//2.转换数组
        //Debug.Log(itemsArray.Count); 

        #endregion

        #region 数组Json转换
        //jsonStr = "{\"数组\":[{\"数据0\":\"000\",\"数据1\":\"111\"},{\"数据2\":\"222\",\"数据3\":\"333\"}]}";
        //Debug.Log(jsonStr);
        //JObject data = JObject.Parse(jsonStr);
        //Debug.Log(data["数组"]); //1.直接打印
        #endregion


        //动态数据加载
        ADDJson();
    }

    void Update()
    {
        
    }
    int jsonNumber = 0;

    void ADDJson() 
    {
        string str= jsonStr.Substring(0, jsonStr.Length- 1);
        if (jsonNumber==0) 
            str += $"\"{jsonNumber}\":\"数据{jsonNumber}\""; 
        else
            str += $",\"{jsonNumber}\":\"数据{jsonNumber}\"";

        str += "}";

        jsonStr = str;

        jsonNumber++;

        JsonConvert();

    }

    void JsonConvert() 
    {
        if (jsonController==null)
            jsonController = new JsonController();

        JObject data = JObject.Parse(jsonStr);

        IEnumerable<JProperty> properties = data.Properties();
        foreach (JProperty item in properties)
        {
            Debug.Log($"{item.Name}:{item.Value}");
            // item.Name 为 键
            // item.Value 为 值
        }
        //JArray itemsArray = (JArray)data["0"];//数组转换

        //2秒后执行
        Invoke("ADDJson",2f);
    }
}

六、注意事项

1.Json文件编码一定要是UTF-8

unity读写json文件,unity,json,游戏引擎

unity读写json文件,unity,json,游戏引擎

 修改方式直接文件另存为修改为UTF-8即可

unity读写json文件,unity,json,游戏引擎

unity读写json文件,unity,json,游戏引擎

2.Json书写格式注意

unity读写json文件,unity,json,游戏引擎

unity读写json文件,unity,json,游戏引擎

unity读写json文件,unity,json,游戏引擎

unity读写json文件,unity,json,游戏引擎

unity读写json文件,unity,json,游戏引擎

3.Json转换类时字段名称要一致

unity读写json文件,unity,json,游戏引擎

4.转换Json的类一定要序列化

未序列化的类无法进行转换 

unity读写json文件,unity,json,游戏引擎文章来源地址https://www.toymoban.com/news/detail-753518.html

到了这里,关于Unity之Json读取写入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)

    JSON文件是一种纯文本文件,用于存储数据,并且是基于JavaScript的一个子集。JSON文件通常用于存储和传输数据,以及在应用程序之间交换信息。它们以键值对的形式存储数据,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象或null。 JSON文件通常具有.json扩展名

    2024年02月05日
    浏览(66)
  • Unity中读取Json文件:基于Assets/Resources文件夹

    我好生气😤,Python,JS里面一两行代码能够搞定的Json读取,在Unity中使用C#读取Json文件超多坑,爬出来一个又来一个。 主要是JsonUtility.FromJson太不给力了。 最好的方式是,使用 https://github.com/jilleJr/Newtonsoft.Json-for-Unity 这个第三方库。详情见下。 Step 1: 先把对应的Json File放到

    2024年02月12日
    浏览(57)
  • 【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)

    JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式存储和表示数据,简洁和清晰的层次结构使JSON成为理想的数据交换语言,易于读者阅读和编写,同时也易于机器解析和生成,并有效的提高网络传输效率 生成JSON数据实例代码如下 下面的代码将JSON中数据

    2024年02月11日
    浏览(80)
  • 【100个 Unity实用技能】☀️ | Unity读取本地文件(Json,txt等)的三种方法示例

    老规矩,先介绍一下 Unity 的科普小知识: Unity 是 实时3D互动内容创作和运营平台 。 包括 游戏开发 、 美术 、 建筑 、 汽车设计 、 影视 在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和

    2023年04月08日
    浏览(66)
  • qt学习:json数据文件读取写入

    目录 什么是json 基本格式 例子  解析json文件数据到界面上 组合json数据文档对象 json是一种轻量级的数据交互格式,简单来说,json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互 以键值对的形式存放 键-----字符串 值------基本数据类型,字

    2024年01月24日
    浏览(45)
  • Unity——JSON的读取

    在实际中,读取JSON比保存JSON重要得多。因为存档、发送数据包往往可以采用其他序列化方法,但游戏的配置文件使用JSON格式比较常见。游戏的配置数据不属于动态数据,属于游戏资源,但很适合用JSON表示。 下面以一个简单的JSON数据文件为例,演示读取JSON。从整体上看有两

    2024年02月06日
    浏览(41)
  • unity c# 读写 json 数组(FromJson / ToJson)

    写入的一定是 一个完整的 object ,不能是 object 的数组 ref tojson 定义对象为 读取的时候一定要是一个 完整的 object ref json must represent an object type 如果 text 的格式为一个json对象: 那么定义对象为 读取格式为 如果 text 的格式为一堆json对象的列表: 那么定义对象为 读取的格式为

    2024年02月07日
    浏览(43)
  • Unity读取Json的几种方法

    目录 存入和读取JSON工具 读取本地Json文件 1、unity自带方法 类名:JsonUtility          序列化:ToJson()                    反序列化:FromJson()         用于接收的JSON实体类需要声明 [Serializable]  序列化 实体类中的成员变量要是字段而不是属性{get;set;} 处理数组的话,外

    2024年01月21日
    浏览(43)
  • 【Unity】C# 创建/读取/解析JSON数据

    判断是否存在JSON数据文件没有则创建并保存

    2024年02月16日
    浏览(71)
  • Unity文本框解析读取mqtt服务器JSON数据

    本次内容是讲述如何将mqtt服务器中接收到的数据在Unity3D的文本框控件中显示JSON键值对中的“值”。 需求: 1.GameObject——UI——Text (将Unity 3D的文本框控件置于场景) 命名空间引用: using UnityEngine.UI; 2. Newtonsoft插件 命名空间引用: Newtonsoft.Json.Linq; 3.MQTT通讯需求: (1)h

    2023年04月08日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包