目录
litjson插件的使用
控制台应用程序
使用 JsonMapper 类实现数据的转换
对TXT文本的更改
Unity3D
对第一个例子的改变
添加信息
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得* JSON *成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式
JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。
JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
JSON 具有自我描述性,更易理解
可以是数字(整数或浮点数),字符串(在双引号中),逻辑值(true 或 false),数组(在中括号中),对象(在大括号中),null。
LitJSON它的特点是小、快速、易于使用。只需导入一个.dll的文件即可使用。它的源代码使用C#编写,可以通过任何.Net平台上的语言进行调用。你可以在VS上右键你的项目,点击管理NuGet程序包,搜索到它,然后安装。
或者点击这里下载。
它是解析json的插件之一,可以在C#应用程序,web程序,还有Unity3d C#脚本中使用。D
在这里简单的介绍一下在控制台应用程序和Unity3D上使用方式。
控制台应用程序
首先需要右键你的项目,添加引用,浏览你的本地文件添加LitJson.dll,然后才能导入命名空间 using LitJson;
使用 JsonMapper 类实现数据的转换
示例:
using LitJson;
using System;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public DateTime Birthday { get; set; }
}
public class JsonSample
{
public static void Main()
{
PersonToJson();
JsonToPerson();
}
public static void PersonToJson()
{
Person example = new Person();
example.Name = "William Shakespeare";//威廉·莎士比亚
example.Age = 51;
example.Birthday = new DateTime(1564, 4, 26);
string json_bill = JsonMapper.ToJson(example);
Console.WriteLine(json_bill);
}
public static void JsonToPerson()
{
string json = @"
{
""Name"" : ""Thomas More"",
""Age"" : 57,
""Birthday"" : ""02/07/1478 00:00:00""
}";
Person thomas = JsonMapper.ToObject
Console.WriteLine("Thomas' age: {0}", thomas.Age);
}
}
运行结果为
{"Name":"William Shakespeare","Age":51,"Birthday":"04/26/1564 00:00:00"}
Thomas' age: 57
对TXT文本的更改
也可以将txt格式的文本拖进项目里,然后通过File.ReadAllText的方式打开文本,对字符转换。
JsonData data = JsonMapper.ToObject(File.ReadAllText("Skill.txt"));//你的文本名称。
foreach (JsonData item in data)
{
item["ID"] = 5;
}
JsonWriter jw = new JsonWriter();
data.ToJson(jw);//通过该方法把JsonData对象写进jsonwriter里
string json = jw.ToString();//通过该方法获得修改好的json串
Console.WriteLine(json);
File.WriteAllText("Skill.txt", json);//把新的json串保存在源文件(覆盖源文件)
SkillClass[] skill = JsonMapper.ToObject
foreach (var item in skill)
{
Console.WriteLine(item);
}
Console.ReadKey();
运行前的txt
[
{"ID":2,"Name":"凤舞九天","Damage":400},
{"ID":3,"Name":"化骨绵掌","Damage":600},
{"ID":4,"Name":"不动明王","Damage":800}
]
运行结果
[{"ID":5,"Name":"\u51E4\u821E\u4E5D\u5929","Damage":400},{"ID":5,"Name":"\u5316\
u9AA8\u7EF5\u638C","Damage":600},{"ID":5,"Name":"\u4E0D\u52A8\u660E\u738B","Dama
ge":800}]
ID:5Name:凤舞九天Damage:400
ID:5Name:化骨绵掌Damage:600
ID:5Name:不动明王Damage:800
你还可以通过JsonReader和JsonWriter对Json读出和写入。
Unity3D
首先将dll文件通过Import New Asset 的方式导入到项目中,然后导入命名空间 using LitJson;
unity中的用法和控制台应用程序中的方法大同小异,将第一个例子的代码改一下即可。
对第一个例子的改变
using LitJson;
using UnityEngine;
using System.Collections;
using System;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public DateTime Birthday { get; set; }
}
///
///需要继承MonoBehaviour才能拖进对象上调用。
// 或者不继承也不拖上去,写为静态,在其他脚本中调用此脚本的方法。
///
public class JsonSample : MonoBehaviour
{
void Start()
{
PersonToJson();
JsonToPerson();
}
void PersonToJson()
{
Person bill = new Person();
bill.Name = "William Shakespeare";
bill.Age = 51;
bill.Birthday = new DateTime(1564, 4, 26);
string json_bill = JsonMapper.ToJson(bill);
Debug.Log(json_bill);
}
void JsonToPerson()
{
string json = @"
{
""Name"" : ""Thomas More"",
""Age"" : 57,
""Birthday"" : ""02/07/1478 00:00:00""
}";
Person thomas = JsonMapper.ToObject
Debug.Log(thomas.Age);
}
}
运行结果为·
{"Name":"William Shakespeare","Age":51,"Birthday":"04/26/1564 00:00:00"}
Thomas' age: 57
再看另一个例子
添加信息
using UnityEngine;
using System.Collections;
using LitJson;
public class UseJson : MonoBehaviour
{
void Start()
{
JsonData jsonData = new JsonData();
jsonData["name"] = "莎士比亚";
jsonData["age"] = 51;
jsonData["sex"] = "男";
string strJson = jsonData.ToJson(); //转化成json格式字符串
Debug.Log(strJson);
JsonData jsonData2 = JsonMapper.ToObject(strJson); //转化成json格式数据
Debug.Log(jsonData2["name"]);
jsonData["info"] = new JsonData();
jsonData["info"]["逝世"] = "1616/4/23";
jsonData["info"]["job"] = "诗人";
strJson = jsonData.ToJson();
Debug.Log(strJson);
JsonData jsonData3 = JsonMapper.ToObject(strJson);
Debug.Log(jsonData3["info"]["phone"]);
Debug.Log(jsonData3["info"][1]);
Debug.Log(jsonData3["info"].Count); //2
JsonData data = new JsonData();
data.Add(1);
data.Add(2);
data.Add(3);
data.Add("Launch!");
jsonData["myArray"] = data;//数组添加
strJson = jsonData.ToJson();
Debug.Log(strJson);
for (int i = 0; i < jsonData.Count; i++)
{
print(jsonData[i]);
if (jsonData[i].IsArray)
{
print(jsonData[i][3]);//数组解析
}
}
}
}
运行结果
{"name":"莎士比亚","age":51,"sex":"男"}
莎士比亚
{"name":"莎士比亚","age":51,"sex":"男","info":{"逝世":"1616/4/23","job":"诗人"}}
Null
诗人
{"name":"莎士比亚","age":51,"sex":"男","info":{"逝世":"1616/4/23","job":"诗人"},"myArray":[1,2,3,"Launch!"]}
莎士比亚
51
男
JsonData object
JsonData array
Launch!
unity同样可以拖进txt格式的文本,对其转换和更改。public一个TextAsset,将其拖进去即可。不再举例。