对象表示为键值对 "age" : 10 数据逗号分隔 花括号保存对象 方括号保存数组
JSON 键/值对
一般游戏中的配置文件使用两种格式: json或者xml格式 为游戏运行提供数据支持
数值 功能 总测
游戏中的数据: 固定(本地/基础 数据) 可变数据(玩家数据 )
将json文件读取出来存成string 用过JsonUtility类将Json保存成对象
public class ReadTeaJson : MonoBehaviour {
public AllItem allItem;
// Use this for initialization
void Start () {
//将js读取到内存
string jsonInfo = File.ReadAllText(Application.dataPath + @"\Scripts\Item.json"
,System.Text.Encoding.UTF8);
//获取到了json对象的数组
allItem = JsonUtility.FromJson<AllItem>(jsonInfo);
//print(allItem.items[0].name);
}
// Update is called once per frame
void Update () {
}
}
[System.Serializable]
public class AllItem
{
public Item[] items;
}
[System.Serializable]
public class Item
{
public int id;
public string name;
public string describe;
public string sprite_Name;
public int price;
public int type;
}
通过[System.Serializable] 进行串行化,将存储和读取文件、内存或其他地方中的对象,示例数据保存在存储介质上。
通过插件生成Json文件
public class CreateJsonFromUnity : MonoBehaviour {
// Use this for initialization
void Start () {
//JsonMapper
CreateJson();
}
private void CreateJson()
{
JsonData jsonData = new JsonData();
jsonData["age"] = 233;
jsonData["name"] = "kk";
jsonData["ItemBag"] = new JsonData();
jsonData["WeaponBag"] = new JsonData();
JsonData jsonData2 = new JsonData();
jsonData2["item"] = new JsonData();
JsonData jsonData3 = new JsonData();
jsonData3["id"] = 1;
jsonData3["name"] = "tulong";
jsonData3["Description"] = "baodao";
jsonData2["item"].Add(jsonData3);
jsonData2["item"].Add(jsonData3);
jsonData["ItemBag"].Add(jsonData2);
//=================================
JsonData jsonData4 = new JsonData();
jsonData4["weapons"] = new JsonData();
JsonData jsonData5 = new JsonData();
jsonData5["id"] = 0;
jsonData5["name"] = "轩辕剑";
jsonData5["weaponAttribute"] = new JsonData();
JsonData jsonData6 = new JsonData();
jsonData6["atk"] = 0;
jsonData6["def"] = 1;
jsonData6["miss"] = 2;
jsonData5["weaponAttribute"].Add(jsonData6);
jsonData4["weapons"].Add(jsonData5);
jsonData4["weapons"].Add(jsonData5);
jsonData["WeaponBag"].Add(jsonData4);
string json = jsonData.ToJson();
json = ConvertJson(json);
StreamWriter streamWriter = new StreamWriter(Application.dataPath + "PersonJson.Json");
streamWriter.Write(json);
streamWriter.Close();
streamWriter.Dispose();
}
/// <summary>
/// 编码转换
/// </summary>
/// <param name="jsonStr"></param>
/// <returns></returns>
public string ConvertJson(string jsonStr)
{
Regex reg = new Regex(@"(?i)\\[uU]([0-9a-f]{4})");
string ss = reg.Replace(jsonStr, delegate (Match m) { return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString(); });
return ss;
}
}
class Person
{
int age;
string name;
ItemBag itemBag;
WeaponBag weaponBag;
}
internal class WeaponBag
{
Weapon[] weapons;
}
internal class Weapon
{
int id;
string name;
WeaponAttribute weaponAttribute;
}
internal class WeaponAttribute
{
int atk;
int def;
int miss;
}
internal class ItemBag
{
Item[] item;
}
internal class Item
{
int id;
string name;
string description;
}
第二种方法进行写入Json,注意类的成员要全部public
private void CreateJsonNew()
{
Item item0 = new Item(0, "MP4", "Auto GUN");
Item item1 = new Item(0, "AK47", "Auto GUN");
Item[] items = new Item[] { item0, item1};
ItemBag itemBag = new ItemBag(items);
WeaponAttribute weaponAttribute = new WeaponAttribute(2, 3, 3);
Weapon weapon0 = new Weapon(0, "HandGun", weaponAttribute);
Weapon weapon1 = new Weapon(0, "HandGun", weaponAttribute);
Weapon[] weapons = new Weapon[] { weapon0, weapon1 };
WeaponBag weaponBag = new WeaponBag(weapons);
Person kk = new Person(666, "kk", itemBag, weaponBag);
//print(kk.)
string json = JsonMapper.ToJson(kk);
json = ConvertJson(json);
StreamWriter streamWriter = new StreamWriter(Application.dataPath + "/PersonJson.Json");
streamWriter.Write(json);
streamWriter.Close();
streamWriter.Dispose();
}
解析Json
private void ReadJson()
{
string jsonData = File.ReadAllText(Application.dataPath + "/PersonJson.Json");
JsonReader jsonReader = new JsonReader(jsonData);
Person mjsonData = JsonMapper.ToObject<Person>(jsonReader);
}