Unity读写Json文件

Unity读写Json文件,第1张

方法一 直接传结构体与保持文件名字

  public void WriteJson(object ob, string jsonName)

    {

        string json = LitJson.JsonMapper.ToJson(ob)

        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(json)

        string filePath = Application.dataPath + "/Resources/" + jsonName + ".json"

        using (System.IO.FileStream stream = new System.IO.FileStream(filePath, System.IO.FileMode.Create))

        {

            stream.Write(bytes, 0, bytes.Length)

        }

        UnityEditor.AssetDatabase.Refresh()//属性Asset,生成完成后立刻可以看到文件

    }

方法二 jsonwriter 半编译写法

  void CreateJson()

    {

        string path = Application.dataPath + "/Resources/Jsons/" + objBase.transform.name + ".json"

        FileInfo fileInfo = new FileInfo(path)

        StreamWriter sw = fileInfo.CreateText()

        StringBuilder sb = new StringBuilder()

        JsonWriter jsonwriter = new JsonWriter(sb)

        jsonwriter.WriteObjectStart()//1

        for (int i = 0i <numbers.Counti++)

        {

            jsonwriter.WritePropertyName("Number" + (i + 1))

            jsonwriter.WriteObjectStart()//1-1

            type = new List<Transform>()

            foreach (Transform child in numbers[i].transform)

                type.Add(child)

            jsonwriter.WritePropertyName("TypeCount")jsonwriter.Write(type.Count)

            for (int j = 0j <type.Countj++)

            {

                jsonwriter.WritePropertyName("Type" + (j + 1))

                jsonwriter.WriteObjectStart()//1-1-1

                pos = new List<Transform>()

                foreach (Transform child in type[j].transform)

                    pos.Add(child)

                jsonwriter.WritePropertyName("Size")jsonwriter.Write(pos[0].transform.localScale.x.ToString())

                jsonwriter.WritePropertyName("Pos")

                jsonwriter.WriteArrayStart()

                for (int k = 0k <pos.Countk++)

                {

                    jsonwriter.Write("(" + pos[k].transform.localPosition.x + "," + pos[k].transform.localPosition.y + ")")

                }

                jsonwriter.WriteArrayEnd()

                jsonwriter.WriteObjectEnd()//1-1-1

            }

            jsonwriter.WriteObjectEnd()//1-1

        }

        jsonwriter.WriteObjectEnd()//1

        sw.WriteLine(sb.ToString())

        sw.Close()

        AssetDatabase.Refresh()

    }

Json 里面的数据是double 类型,使用float 会出问题

double.Parse  float .Parse    不一样

上面三篇文章作为参考,测试一下pickle和JSON的读写。

先说结论:JSON比pickle快,在需要较大的data时,可以考虑用ujson,更快。一般情况下JSON够用。另外,JSON不支持np.array,需要转换成list(.tolist()),所以考虑到易用性而不需要考虑读取速度时,用pickle最无脑简单。

首先需要导入json库:

import json

json的读写:

一共有四个模块:dumps、dump、loads、load

json.dumps: python对象——>JSON字符

json.loads: JSON字符——>python对象

json.dumps: 将数据写入json文件中

在使用JSON的时候遇到一个报错:

NumPy array is not JSON serializable

搜到解决方案:

stackoverflow-NumPy array is not JSON serializable

简单说就是JSON没有np array的编码器,所以需要先把array转换成list:

your_array.tolist()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11414296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存