Json格式必须遵循以下原则,不得违反.
一、必须以一个对象或者数组作为根节点;
以一个对象作为根节点 {"xx":"xx","xx":"xx","xx":{..},"xx":[]....}
以一个数组作为根节点 [{},{},...]
二、使用{}表示对象,[]表示数组,中间的属性使用键值对的方式;
三、键值对的键必须使用双引号“”包围住;
四、键值对中的值可以是对象,数组,数字,字符串,true/false, null(空值);
解析json
1.unity提供api JsonUtility(重点:会使用最后两个方法解析和写入)
using System;
string json = "{\"name\":\"小明\",\"age\":100,\"height\":12.5,\"isWoman\":false ,\"garde\":{\"name\":\"脚子\",\"socre\":100},\"arr\":[\"w\",\"z\"]}";
class UserInfo
{
public string name;
public int age;
public float height;
public bool isWoman;
public Grade garde;
public string[] arr;
}
//序列化
[Serializable]
public class Grade
{
public string name;
public int socre;
}
public class JsonDemo : MonoBehaviour
{
void Start()
{
//ReadJson();
//WriteJson();
}
//解析Json
void ReadJson()
{
UserInfo user = JsonUtility.FromJson<UserInfo>(json);
print(user.name);
print(user.isWoman);
print(user.height);
print(user.age);
print(user.garde.name);
print(user.garde.socre);
print(user.arr[0]);
}
//写Json
void WriteJson()
{
UserInfo info = new UserInfo();
info.name = "大脚";
info.isWoman = false;
info.age = 20;
info.height = 130f;
string json = JsonUtility.ToJson(info);
print(json);
}
2.使用外部LitJson.dll(可百度自行下载!)
(手动把该文件放入unity的工程中Assets里面)
using LitJson;
public class JsonDemo : MonoBehaviour
{
void Start()
{
StartCoroutine(downLoad());
}
//www下载Json
IEnumerator downLoad()
{
WWW www;
yield return www = new WWW("https://www.sojson.com/open/api/weather/json.shtml?city=深圳");
if (www.isDone)
{
if (string.IsNullOrEmpty(www.error))
{
ReadJson(www.text);
}
else
{
print(www.error);
}
}
}
//解析Json
void ReadJson(string json)
{
JsonData date = JsonMapper.ToObject(json);
JsonData rq = date["date"];
print(rq);
JsonData key = date["data"];
JsonData yes = key["ganmao"];
print(yes);
}
}