5.22Json生成與解析

using UnityEngine;

using System.Collections;

using LitJson;

using System.IO;

using System.Text;

using UnityEditor;

using System.Collections.Generic;

public class? JsonDcript:MonoBehaviour{

public? TextAsset??? txt;//讀取Asset文件

//創(chuàng)建文件夾路徑

string?? dirpath;

//創(chuàng)建文件路徑

string?? filePath;

voidStart(? ){

dirpath=Application.dataPath+"/JsonFiles";

filePath=dirpath+"/MyJson.txt";

//MergerAndSaveJson( );

//對象的所有屬性(字段),轉(zhuǎn)化為Json格式字符串

//HreoDataModel model=new HreoDataModel( );

//model.Hero_Name="xiaoli";

//model.Hp=100;

//model.Attack=30;

??????? //LitJson

//print(JsonMapper.ToJson(model));

//string?? modelstring=JsonMapper.ToJson(model);

?????? //JsonUtiluty

//print(JsonUtility.ToJson(model));

//將得到的json字符串,依次賦值給指定的數(shù)據(jù)模型對象

//StreamReader?? reader=new?? StreamReader(filePath);

//string?? jsonStr=reader.ReadToEnd( );

//HreoDataModel?? model_2=new? HreoDataModel( );

//model_2=JsonMapper.ToObject(jsonStr);

//model_2=JsonUtility.FromJson(jsonStr);

//foreach( HeroSkillDataModel?? dm? in? model_2.Skill){

//print(dm.passivity);

}

}

//合成Json并寫入文件

public? void?? MergerAndSaveJson( ){

StringBuilder??? strBuilder=new? StringBuilder( );

JsonWriter? writer=new?? JsonWriter(strBuilder);

writer.WriteObjectStart( );//{


writer.WritePropertyName("Hero_Name");

writer.Write("hero");


writer.WritePropertyName("Hp");

writer.Write(100);


writer.WritePropertyName("Attack");

writer.Write(50);


writer.WritePropertyName("Skill");//數(shù)組

writer.WriteArrayStart( );//[


writer.WriteObjectStart( );//{

writer.WritePropertyName("被動技能");

writer.Write("出血");

writer.WriteObjectEnd();//}


writer.WriteObjectStart( );//{

writer.WritePropertyName("Q技能");

writer.Write("大殺四方");

writer.WritePropertyName("冷卻時間");

writer.Write("7/6/5/4/3");

writer.WritePropertyName("消耗");

writer.Write(30);

writer.WriteObjectEnd( );//}


writer.WriteObjectStart( );

writer.WritePropertyName("W技能");

writer.Write("殘忍打擊");

writer.WritePropertyName("冷卻時間");

writer.Write("8/7/6/2/1");

writer.WritePropertyName("消耗");

writer.Write(50);

writer.WriteObjectEnd( );


writer.WriteObjectStart( );

writer.WritePropertyName("E技能");

writer.Write("無情鐵手");

writer.WritePropertyName("冷卻時間");

writer.Write("9/5/3/1");

writer.WritePropertyName("消耗");

writer.Write(60);

writer.WriteObjectEnd( );


writer.WriteArrayEnd( );//]

writer.WriteObjectEnd( );//}

Debug.Log(strBuilder);

DirectoryInfo? dir=new? DirectoryInfo(dirpath);? //創(chuàng)建文件的目錄

if(!dir.Exists){? //檢查文件夾是否存在

Directory.CreateDirectory(dirpath);

//如果當前程序運行在Unity軟件中才會執(zhí)行下面語句

#ifUNITY_EDITOR

AssetDatabase.Refresh( );//刷新

#endif

}

//把Json字符串寫入Txt

StreamWriter? sw;

if(File.Exists(filePath)){

//如果文件存在,就繼續(xù)往文件中添加內(nèi)容

sw=File.AppendText(filePath);

}else{

//如果文件不存在,則創(chuàng)建文件

sw=File.CreateText(filePath);

}

sw.WriteLine(strBuilder);

sw.Close( );//關(guān)閉輸入流

#ifUNITY_EDITOR

AssetDatabase.Refresh( );

#endif

}


public void? ReadJson( ){? //新版本

//從文件讀取Json字符串

if(File.Exists(filePath)){

StreamReader? reader=new? StreamReader(filePath);

string? jsonStr=reader.ReadToEnd( );//從頭讀到尾

//將json格式的字符串轉(zhuǎn)換為json數(shù)據(jù),然后操作json數(shù)據(jù)

//LitJson

JsonData? jd=JsonMapper.ToObject(jsonStr);

foreach(JsonData? josnData? in?? jd["Skill"]){

foreach(string? key? in?? josnData.Keys){

Debug.Log(key+":"+josnData[key]);

}

}

}

}

public?? T?? JsonToModel <T>(string? path)where T:class,new( ){//泛型方法

if(File.Exists(path)){

StreamReader? sr=new? StreamReader(path);

string?? jsonStr=sr.ReadToEnd( );

T?? model=JsonMapper.ToObject (jsonStr) as? T;

return?? model;

}

return?? null;

}

}


usingUnityEngine;

usingSystem.Collections;

usingSystem.Collections.Generic;

public class?? HreoDataModel{

public?? string?? Hero_Name;

public??? int??? Hp;

public??? int???? Attack;

public?? List <HeroSkillDataModel>Skill;

public? override?? string??? ToString( )

{

return? Hero_Name+", "+Hp.ToString( );

}

}


usingUnityEngine;

usingSystem.Collections;

public? class? HeroSkillDataModel{

public? string? passivity="";

public?? string? Q;

public?? string? W;

public??? string? E;

public??? string CoolTime;

public? string??? consume;

}

MVC

usingUnityEngine;?

usingSystem.Collections;

usingSystem.IO;

usingLitJson;

public class UIModel{

public delegate void Data UpdateDelegate( );

public event? DataUpdateDelegate?? dataUpdateEvent;

public string? mPlayer_name;

public? string? mPlayer_money;

public? string? mPlayer_exp;

public? string? mPlayer_race;

public? string? mPlayer_hp;

public? string? mPlayer_attack;

public? string? mPlayer_defense;

//自定義初始化

//重寫toString( )

public? void?? JsonToModel(string? path){

if(File.Exists(path)){

StreamReader? sr=new? StreamReader(path);

string? jsonStr=sr.ReadToEnd( );

UIModel? model=JsonMapper.ToObject<UIModel>(jsonStr);

this.mPlayer_name=model.mPlayer_name;

this.mPlayer_money=model.mPlayer_money;

this.mPlayer_exp=model.mPlayer_exp;

this.mPlayer_race=model.mPlayer_race;

this.mPlayer_hp=model.mPlayer_hp;

this.mPlayer_attack=model.mPlayer_attack;

this.mPlayer_defense=model.mPlayer_defense;

dataUpdateEvent( );

}

}

}


usingUnityEngine;

usingSystem.Collections;

usingUnityEngine.UI;

publicclassUIManager:MonoBehaviour{

public Text nameText;

public Text moneyText;

public Text expText;

public Text raceText;

public Text hpText;

public Text attackText;

public Text? defenseText;


}


usingUnityEngine;

usingSystem.Collections;

publicclassGameController:MonoBehaviour{

UIManager?? manager;

UIModel??? model;

void Start( ){

manager=GameObject.Find("UIManager").GetComponent<UIManager>( );

model=new UIModel( );

model.dataUpdateEvent+=UpdataView;

}

void? Update( ){

if(Input.GetKeyDown(KeyCode.U)){

model.JsonToModel(Application.dataPath+"/JsonFiles/MyJson.txt");

}

}

void?? UpdataView( ){

manager.nameText.text=model.mPlayer_name;

manager.moneyText.text=model.mPlayer_money;

manager.expText.text=model.mPlayer_exp;

manager.raceText.text=model.mPlayer_race;

manager.hpText.text=model.mPlayer_hp;

manager.attackText.text=model.mPlayer_attack;

manager.defenseText.text=model.mPlayer_defense;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 將Json.txt的天氣信息獲取并顯示在UI usingUnityEngine; usingSystem.Coll...
    胤醚貔貅閱讀 440評論 0 0
  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,934評論 0 23
  • 疼惜自己就是當你端了一盤剛出爐的銅鑼燒出來,有人一箭步上來要搶第一塊的時候,你投給他一種兇狠的眼神,你要疼惜那個投...
    與姝會友閱讀 333評論 0 0
  • 以前我是不宅的,至少是我這么認為。 最近的生活都是從窗外看天,剩下的眼光都是分散在各種屏幕上,覺得自己要進化出第三...
    厭世者orz閱讀 309評論 0 0