Unity之Json文件

  • Json( JavaScript Object Notation ) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 Json采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python、C# 等)。这些特性使Json成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
  • Json 语法是 JavaScript 对象表示语法的子集。
    * 数据在键值对中
    * 数据由逗号分隔
    * 花括号保存对象
    * 方括号保存数组
  • 常用Json库:
   * Json.NET :.NET自带的JSON库,缺点:比较臃肿
   * MiniJson:不支持自定义的序列化
   * LitJson:IOS平台支持不太友好,只做Android平台可以考虑使用
  •  (本文所述项目使用LitJson,开始项目之前,将库脚本或动态库(LitJson.dll)置在Assets目录下的Plugins文件夹中)

class Person
{
    public string name;
    public int age;
    public string sex;
    public Hashtable hobby;
}

using System.Collections;
using System.IO;
using System.Text;
using LitJson;
using UnityEditor;
using UnityEngine;
public class TestJson : MonoBehaviour
{
    private string path;
    Person person = new Person();
    void Start()
    {
        path = Application.dataPath + "/json/myJson.json";
        person.hobby = new Hashtable();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))//创建
        {
            //CreateJsonMethodOne();
            CreateJsonMethodTwo();
            //CreateJsonMethodThree();
            // CreateJsonMethodFour();
        }
        if (Input.GetMouseButtonDown(1))//解析json
        {
            AnalyzeJson();
        }
        if (Input.GetKeyDown(KeyCode.D))//删除
        {
            Delete();
        }
        if (Input.GetKeyDown(KeyCode.X))//增加、修改
        {
            UpdateJson();
        }
    }
--------------------------创建Json文件有四种方式---------------------------------

*********************   使用JsonData   *********************
    private void CreateJsonMethodOne()
    {
        JsonData data = new JsonData();
        data["name"] = "fcj";
        data["sex"] = "女";
        data["age"] = 23;
        data["hobby"] = new JsonData();
        data["hobby"]["morning"] = "sleep";
        data["hobby"]["noon"] = "sleep";
        data["hobby"]["evening"] = "sleep";
        string str = data.ToJson();
        StreamWriter sw;
        FileInfo fi = new FileInfo(path);
        if (fi.Exists)
        {
            fi.Delete();
        }
        sw = fi.CreateText();
        sw.Write(str);
        sw.Close();
        AssetDatabase.Refresh();
    }

Unity之Json文件

*********************   使用JsonMapper   *********************
    private void CreateJsonMethodTwo()
    {
        person.name = "fcj";
        person.age = 22;
        person.sex = "女";
        person.hobby.Add("morning", "sleep");
        person.hobby.Add("noon", "sleep");
        person.hobby.Add("evening", "sleep");
        string str = JsonMapper.ToJson(person);
        StreamWriter sw;
        FileInfo fi = new FileInfo(path);
        if (fi.Exists)
        {
            fi.Delete();
        }
        sw = fi.CreateText();
        sw.Write(str);
        sw.Close();
        AssetDatabase.Refresh();
    }

Unity之Json文件

*********************    使用 JsonWriter   ********************
    private void CreateJsonMethodThree()
    {
        JsonWriter writer = new JsonWriter();
        writer.WriteArrayStart();
        writer.Write("one");
        writer.Write("two");
        writer.Write("three");
        writer.Write("four");
        writer.WriteArrayEnd();
        string str = writer.ToString();
        StreamWriter sw;
        FileInfo fi = new FileInfo(path);
        if (fi.Exists)
        {
            fi.Delete();
        }
        sw = fi.CreateText();
        sw.Write(str);
        sw.Close();
        AssetDatabase.Refresh();
    }

     Unity之Json文件

**********************   使用 JsonWriter   *********************
    private void CreateJsonMethodFour()
    {
        JsonWriter writer = new JsonWriter();
        writer.WriteObjectStart();
        writer.WritePropertyName("name");
        writer.Write("fcj");
        writer.WritePropertyName("age");
        writer.Write(24);
        writer.WritePropertyName("sex");
        writer.Write("女");
        writer.WriteObjectEnd();
        string str = writer.ToString();
        byte[] bytes = Encoding.Default.GetBytes(str);
        StreamWriter sw;
        FileInfo fi = new FileInfo(path);
        if (fi.Exists)
        {
            fi.Delete();
        }
        sw = fi.CreateText();
        sw.Write(Encoding.GetEncoding("GB2312").GetString(bytes));
        sw.Close();
        AssetDatabase.Refresh();
    }

     Unity之Json文件

------------------------------删除Json文件---------------------------------
    private void Delete()
    {
        FileInfo fi = new FileInfo(path);
        if (fi.Exists)
        {
            fi.Delete();
        }
        AssetDatabase.Refresh();
    }
--------------------------解析Json文件有三种发法-------------------------
Json文件:
{"name":"fcj","age":22,"sex":"女","hobby":{"evening":"sleep","noon":"sleep","morning":"sleep"}}
private void AnalyzeJson()
    {
        FileInfo fi = new FileInfo(path);
        if (fi.Exists)
        {
----------------获取字符串方法一----------------
            StreamReader Stream_reader = fi.OpenText();
            string str = Stream_reader.ReadToEnd();
-----------------获取字符串方法二---------------
            FileStream fs = fi.OpenRead();
            byte[] bytes = new byte[1024 * 1024 * 5];
            int length = fs.Read(bytes, 0, bytes.Length);
            string str = Encoding.UTF8.GetString(bytes, 0, length);
**************************   方法一   ************************
            JsonReader Json_Reader=new JsonReader(str);
            JsonData data = JsonMapper.ToObject(Json_Reader);
            print(data["name"] + ":" + data["age"]);

      Unity之Json文件
**************************   方法二   ************************
            JsonData data = JsonMapper.ToObject(str);
            print(data["name"] + ":" + data["age"]);
            IDictionary dic = data as IDictionary;
            foreach (string VARIABLE in dic.Keys)
            {
                if (VARIABLE != "hobby")
                    print(VARIABLE + dic[VARIABLE]);
                else
                {
                    IDictionary hobby = data[VARIABLE] as IDictionary;
                    foreach (string item in hobby.Keys)
                    {
                        print(item + ":" + hobby[item]);
                    }
                }
            }

     Unity之Json文件
**************************   方法三   ************************
            Person p = JsonMapper.ToObject(str);
            print(p.name + ":" + p.age + ",hobby:" + p.hobby["morning"]);

      Unity之Json文件
            Stream_reader.Close();
            fs.Close();
        }
    }

-----------------------------更改Json文件-----------------------------
    private void UpdateJson()
    {
        FileInfo fi = new FileInfo(path);
        if (fi.Exists)
        {
            StreamReader Stream_reader = new StreamReader(path, Encoding.UTF8);//或fi.OpenText();
            string str = Stream_reader.ReadToEnd();
            Person p = JsonMapper.ToObject(str);
            Stream_reader.Close();
            fi.Delete();

            StreamWriter sw = fi.CreateText();
            Person newPerson = new Person();
            newPerson.name = "newName";
            newPerson.age = p.age;
            newPerson.sex = p.sex;
            newPerson.hobby = new Hashtable();
            foreach (string VARIABLE in p.hobby.Keys)
            {
                newPerson.hobby.Add(VARIABLE, p.hobby[VARIABLE].ToString());
            }
            newPerson.hobby.Add("afternoon", "eat");
            string newStr = JsonMapper.ToJson(newPerson);
            sw.Write(newStr);
            sw.Close();
            AssetDatabase.Refresh();
        }
    }
}

Unity之Json文件

  • p.hobby[VARIABLE]为JsonData类型,所以要toString(),否则会有异常;
  • p.hobby要注意实例化,否则会报空指针异常;
  • StreamWriter、StreamReader等文件处理类用完以后要记得Close()。
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烫青菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值