JSON:

        json是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,易于人阅读和编写,

同时也易于机器解析和生成,并有效地提升网络传输效率。

   格式:同样是以键值对的格式存储,并列关系用{}括起来,用“,”隔开,当值有子对象时[]括起来

{键:值,键:值,键:[{键:值,键:值,键:值},{键:值,键:值,键:值}]
     }
例:
{
    "hero":"诺克萨斯之手",
    "hp":"582.24",
    "ap":"55.88",
    "Skill":
    [
    {"key":"q","name":"大杀四方","cd":"9","expend":"30"},
    {"key":"w","name":"致残打击","cd":"9","expend":"30"},
    {"key":"e","name":"无情铁手","cd":"24","expend":"50"},
    {"key":"r","name":"诺克萨断头台","cd":"120","expend":"100"}

        ]
}


运用到Unity中:

1.新建一个TXT文件,转换成.JSON格式的文件,拖拽到Unity工程目录下,打开,将上段Json格式的数据输入进去。

数据库json类型字段对应java的 json与数据库_unity3d

数据库json类型字段对应java的 json与数据库_json_02


2.读取json数据:

需要引入动态链接库,各大论坛上都有下载,直接导入就可以了。

数据库json类型字段对应java的 json与数据库_unity3d_03

然后建立脚本,首先引入命名空间:

using LitJson; //对json操作的命名空间
using System.Text;//
using System.IO;
using UnityEditor;
   void Start () 
    {

        ReadJsonFromFile ();
    }    /// <summary>
    /// 读取json数据
    /// </summary>
    void ReadJson(){
        string str = 
        @"{
          'name':'UnityClass',
          'id':'1000',
          'student':
         [
            {'stuid':'1001','stuname':'丁义珍','score':'100'},
            {'stuid':'1002','stuname':'孙连城','score':'99'}
         ]
        }";
        //解析,将Json格式化字符串转化为对象,并将这些信息保存到jsondata对象当中
        JsonData jd = JsonMapper.ToObject(str);

        //json相当于键值对,交叉数组,通过值找到对应的名称
        print ("name:"+jd["name"]);
        print ("id:"+jd["id"]);

        //用JsonData对象保存jd里面的“student”(也相当于键值对数组)信息
        JsonData jdStu = jd ["student"];
        print ("一共拥有多少个学生:"+ jdStu.Count);

        for (int i = 0; i < jdStu.Count; i++) {
            print ("stuid"+jdStu[i]["stuid"]);
            print ("stuname:" + jdStu[i]["stuname"]);
            print ("score" + jdStu [i] ["score"]);

        }

    }3.读取Json文件:
接受刚才导入的JSon文件 heroinfotxt
同样以键值对的方式读取。
  public TextAsset TA;//文本资源
    /// <summary>
    /// 读取json文件
    /// </summary>
    void ReadJsonFromFile(){

        JsonData jd = JsonMapper.ToObject (TA.text);

//        JsonData jdHero = jd ["hero"];

        for (int i = 0; i < jd["hero"].Count ; i++) {

            print(jd["hero"][i]["Name"]+ ":"+ jd["hero"][i]["hp"]);


        }
    }

4.写入Json数据

以键值对的方式写入,一个键对应一个值,或者是数组,

注意开始写入数据获开始写入数组时都要要写 jw.WriteObjectStart ();

结束写入时要写 jw.WriteObjectEnd();

stringBuilder的用法和String一样但是前者不会随着存储内容的改变而重新开辟空间。


sw.WriteLine (sb);是写入的关键步骤。


基本思路:


1.创建存储string空间


2.创建写入器


3.写入数据


4.创建目录


5.判断路径,添加路径


6.创建写入流

数据库json类型字段对应java的 json与数据库_数据库json类型字段对应java的_04


7.判断文件名,添加文件名


8.wirteLine(sb),写入


9.关闭写入流


10.销毁写入流



void Start () 
    {
        FilePath = Application.dataPath + "/3.Json/Data";
        FileName = FilePath + "/NewFile.json";
 
    }
    
    void Update () 
    {
        if (Input.GetKeyDown(KeyCode.W)) {
            WriteJsonToFile (FilePath,FileName);
        }
    }
    /// <summary>
    /// 写入json数据
    /// </summary>
    /// <param name="path">Path.文件路径</param>
    /// <param name="name">Name.文件名字</param>
    void WriteJsonToFile(string path , string name){

        StringBuilder sb = new StringBuilder ();
        //json写入器
        JsonWriter jw = new JsonWriter (sb);

        //开始写入数据
        jw.WriteObjectStart ();
            //先写入键,在写对应的值
            jw.WritePropertyName ("Class_Name");
            jw.Write ("UnityClass");

            jw.WritePropertyName("person_count");
            jw.Write ("15");

            //如果想写入一个数组,首先写键(数组的名)
            jw.WritePropertyName ("self_info");
                //开始一个数组的写入
                jw.WriteArrayStart ();

                    //01.在数组里面也需要定义开始写入数据(每一个阶的数组的写入都选要写数组的开始写入,和结束写入)
                    jw.WriteObjectStart ();

                        jw.WritePropertyName ("stu_name");
                        jw.Write("赵立春");

                        jw.WritePropertyName ("stu_height");
                        jw.Write ("180");

                        jw.WritePropertyName ("stu_Weight");
                        jw.Write ("80");

                    //结束数组里面的写入数据
                    jw.WriteObjectEnd();

                    //02.开始数据的写入
                    jw.WriteObjectStart();

                        jw.WritePropertyName ("stu_name");
                        jw.Write ("祁同伟");

                        jw.WritePropertyName ("stu_height");
                        jw.Write ("200");

                        jw.WritePropertyName ("stu_weight");
                        jw.Write ("100");

                    //结束数据的写入
                    jw.WriteObjectEnd ();

                //结束数组的写入
                jw.WriteArrayEnd ();
        //结束写入数据
        jw.WriteObjectEnd();

        //打印sb这个json里的数据
        print (sb);

        //创建目录
        DirectoryInfo dir = new DirectoryInfo(path);
        //判断目录是否存在
        if (dir.Exists) {
            print ("此目录已经存在");
        } else {//不存在的话,常见出来
        
            Directory.CreateDirectory (path);
            print ("创建目录成功");
        }
        #if UNITY_EDITOR
        //如果在编辑器下的话,刷新project视图
        AssetDatabase.Refresh();
        #endif 
        //创建写入流
        StreamWriter sw;
        if (File.Exists(name)) {
            print ("文件存在,我们要添加数据了");
            sw = File.AppendText (name);

        } else {
            sw = File.CreateText (name);
            print ("创建文件成功,开始写入数据");
        }
        //通过流去写入数据
        sw.WriteLine (sb);
        //关闭流
        sw.Close();
        //销毁流
        sw.Dispose();
        #if UNITY_EDITOR
        AssetDatabase.Refresh();
        #endif

    }

数据库json类型字段对应java的 json与数据库_数据库json类型字段对应java的_04

数据库json类型字段对应java的 json与数据库_数据库json类型字段对应java的_06