Unity Json解析-保存Json文件

1.第一种unity自带解析的API  JsonUtility 读取Json 不需要dll文件

2.第二种 Newtonsoft.Json dll解析json  读取json  需要dll文件(下载地址) 免费的

json格式如下

{

  "name": [
    {
      "age": 28,
      "sex": "不男不女"
    },
    {
      "age": 7,
      "sex": "东方不败"
    },
    {
      "age": 20,
      "sex": ""
    },
    {
      "age": 15,
      "sex": ""
    }
  ]
}

Json文件我是保存在StreamingAssets 下的 textJson.json

c#脚本如下

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

[Serializable]   //序列化
public class AA
{
    public BB[] name;
}
[Serializable]   //序列化
public class BB
{
    public int age;
    public string sex; 
}
public class Parsing_json : MonoBehaviour
{
    public string jsonpath = Application.streamingAssetsPath + "/textJson.json";
    // Start is called before the first frame update
    void Start()
    {
        #region 第一种unity自带解析的API  JsonUtility 读取Json
        //string json = File.ReadAllText(Application.streamingAssetsPath + "/textJson.json");
        //AA aa = JsonUtility.FromJson<AA>(json);

        //Debug.Log("年龄" + aa.name[0].age + "性别" + aa.name[0].sex);
        //Debug.Log("年龄" + aa.name[1].age + "性别" + aa.name[1].sex);
        //Debug.Log("年龄" + aa.name[2].age + "性别" + aa.name[2].sex);
        //Debug.Log("年龄" + aa.name[3].age + "性别" + aa.name[3].sex);
        #endregion

        #region 第二种 Newtonsoft.Json dll解析json  读取json
        //string json = File.ReadAllText(Application.streamingAssetsPath + "/textJson.json");
        //AA  obj = JsonConvert.DeserializeObject<AA>(json);

        //Debug.Log("年龄: " + obj.name[0].age + "性别: " + obj.name[0].sex);
        //Debug.Log("年龄: " + obj.name[1].age + "性别: " + obj.name[1].sex);
        #endregion

        #region 创建json 保存到json文件
        //// 创建Json
        //BB p1 = new BB();
        //p1.sex = "不男不女";
        //p1.age = 28;
        //string json = JsonUtility.ToJson(p1);

        //BB p2 = new BB();
        //p2.sex = "东方不败";
        //p2.age = 7;
        //BB[] ps = new BB[] { p1, p2 };

        //AA persons = new AA();
        //persons.name = ps;

        //json = JsonUtility.ToJson(persons);
        //if (!System.IO.File.Exists (jsonpath))
        //{
        //    File.CreateText(jsonpath).Dispose();
        //}
        //File.WriteAllText(jsonpath, json, System.Text.Encoding.UTF8);

        #endregion
        //解析Json
        string jso = File.ReadAllText(jsonpath);
        AA obj = JsonUtility.FromJson<AA>(jso);

        foreach (var item in obj.name)
        {
            Debug.Log("年龄: " + item.age + "性别: " + item.sex);
        }

    }
  
}

打印出来如下

 

2.完整脚本挂上运行测试即可 

 

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

[Serializable]   //序列化
public class Lint
{
    public List<Setlist>data = new List<Setlist>();
}
[Serializable]   //序列化
public class Setlist
{
    public string name;        //名称
    public string profession;  //专业
    public string spec;        //规格
    public string number;      //资产编号
    public string brand;       //品牌
    public string time;        //维保时间
    public string recorder;    //记录人    
}
public class Parsing_json : MonoBehaviour
{
    public string jsonpath = Application.streamingAssetsPath + "/textJson.json";

    Dictionary<int, Setlist> DicList = new Dictionary<int, Setlist>();
    Dictionary<int, List<string>> strlisting = new Dictionary<int, List<string>>();

    Lint lint = new Lint();

    /// <summary>
    /// 清空列表
    /// </summary>
   public void Clear_List()
    {
        lint.data.Clear();
    }
    //public void SetDictionary(string profession,string name,string number,string brand,string time,string recorder)
    public void SetDictionary(List<string> _L)

    {
        Setlist setlist = new Setlist();
        setlist.name = _L[0];
        setlist.profession = _L[1];
        setlist.spec = _L[2];
        setlist.number = _L[3];
        setlist.brand = _L[4];
        setlist.time = _L[5];
        setlist.recorder = _L[6];
       

        if (!System.IO.File.Exists(jsonpath))
        {
            File.CreateText(jsonpath).Dispose();
        }
        lint.data.Add(setlist);
        //string json = JsonUtility.ToJson(lint);  
        string json = JsonConvert.SerializeObject(lint);
        
        File.WriteAllText(jsonpath, json, System.Text.Encoding.UTF8);

    }
    public void SetDictionary(Dictionary<int, List<string>> strlist)
    {
        Clear_List();
        for (int i = 0; i < strlist.Count; i++)
        {
            SetDictionary(strlist[i]);
        }

    }
    // Start is called before the first frame update
    void Start()
    {
        List<string> sds = new List<string>();
        sds.Add("0");
        sds.Add("1");
        sds.Add("2");
        sds.Add("3");
        sds.Add("4");
        sds.Add("5");
        sds.Add("9");
        strlisting.Add(0, sds);
        List<string> sdss = new List<string>();
        sdss.Add("6");
        sdss.Add("7");
        sdss.Add("8");
        sdss.Add("9");
        sdss.Add("10");
        sdss.Add("11");
        sdss.Add("19");
        strlisting.Add(1, sdss);
        List<string> sdssd = new List<string>();
        sdssd.Add("12");
        sdssd.Add("13");
        sdssd.Add("14");
        sdssd.Add("15");
        sdssd.Add("16");
        sdssd.Add("17");
        sdssd.Add("18");

        strlisting.Add(2, sdssd);

        SetDictionary(strlisting);

        Parse_Json(jsonpath);
    }
    ////解析Json
    public void Parse_Json(string path)
    {      
        string jso = File.ReadAllText(path);
        //Lint obj = JsonUtility.FromJson<Lint>(jso);  unity 解析
        Lint obj = JsonConvert.DeserializeObject <Lint>(jso);

        for (int i = 0; i < obj.data.Count; i++)
        {
            Setlist setlist = new Setlist();
            setlist.name = obj.data[i].name;
            setlist.profession  = obj.data[i].profession;
            setlist.spec = obj.data[i].spec;
            setlist.number = obj.data[i].number;
            setlist.brand = obj.data[i].brand;
            setlist.time = obj.data[i].time;
            setlist.recorder = obj.data[i].recorder;
            DicList.Add(i, setlist);
        }
        Debug.Log(DicList.Count);
    }

}
创建Json解析Json

 

 

 

 

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

最后警惕一下

如果打印出来的中文出现乱码

解决办法  在文件夹中用记事本打开json文件,另存为一下(改一下编码格式为UTF8即可)名字不用改它会自动覆盖原来的json文件

如果喜欢请点个赞吧 !  感谢

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤

 

posted @ 2021-11-23 15:25  剑起苍穹  阅读(1149)  评论(0编辑  收藏  举报
/*鼠标点击特效*/