unity c# 读写 json 数组(FromJson / ToJson)

Json 的写入 (ToJson)

写入的一定是一个完整的 object,不能是 object 的数组

ref tojson

定义对象为

[Serializable]
public class UserObject
{
    public int userId;
    public int id;
    public string title;
    public string body;
}

// !!! 注意:需要在自己定义的对象基础上,再定义一个数组对象
[Serializable]
public class RootObject
{
    public UserObject[] users;
}
List<UserObject> UserObjectList = new List<UserObject>();

for (int i = 0; i < 10; i++) {
	UserObject json = new UserObject();
	json.userId = i;
	json.id = i;
	json.title = "title"";
	json.body = "---";
	UserObjectList.Add(json);
}


string JsonPath = Application.dataPath + "/out.json";  
if (!File.Exists(JsonPath))  
{  
    File.Create(JsonPath);  
}  

 //!!!关键代码
 // 把 List 转化为 Array 后创建一个 RootObject 实例,将它导出为 json
string result = JsonUtility.ToJson(new RootObject(UserObjectList.ToArray())); 

File.WriteAllText(JsonPath , result);

Json 的读取 (FromJson)

读取的时候一定要是一个完整的 object

ref json must represent an object type

如果 text 的格式为一个json对象:

{
    "userId": 5,
    "id": 42,
    "title":"Douglas Adams",
    "body":"foobar"
}

那么定义对象为

[Serializable]
public class UserObject
{
    public int userId;
    public int id;
    public string title;
    public string body;
}

读取格式为

string jsonStrRead = File.ReadAllText(Application.dataPath + "/in.json");
 //!!!关键代码,可与最后的代码进行比较
 // 这里解析的类为 UserObject
UserObject myObject = JsonUtility.FromJson<UserObject>(jsonStrRead);

如果 text 的格式为一堆json对象的列表:

[
    {
        "userId": 5,
        "id": 42,
        "title":"Douglas Adams",
        "body":"foobar"
    },
    {
        "userId": 6,
        "id": 43,
        "title":"Ford",
        "body":"---"
    }
]

那么定义对象为

[Serializable]
public class UserObject
{
    public int userId;
    public int id;
    public string title;
    public string body;
}

[Serializable]
public class RootObject
{
    public UserObject[] users;
}

读取的格式为

string jsonStrRead = File.ReadAllText(Application.dataPath + "/in.json");
 //!!!关键代码,可与前面的代码进行比较
 // 这里解析的类为 RootObject(即 UserObject 组成的数组对象)
 // 先把 jsonStrRead 变成 { "users" jsonStrRead },再从 users 中提取得到 jsonStrRead
UserObject[] myObject = JsonUtility.FromJson<RootObject>("{\"users\":" + jsonStrRead + "}").users;
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Unity3D 中使用 C# 解析 JSON 数据,可以使用 Unity 内置的 JsonUtility 类或者第三方的 Json.NET 库。下面分别介绍两种方法的使用。 1. 使用 Unity 内置的 JsonUtility 类 JsonUtility 是 Unity 内置的用于 JSON 序列化和反序列化的类,使用起来非常简单。以下是一个使用 JsonUtility 解析 JSON 数据的示例: ```csharp [System.Serializable] public class UserData { public int id; public string name; public int age; // 可以定义其他需要的字段 } public void ParseJsonData(string jsonData) { UserData userData = JsonUtility.FromJson<UserData>(jsonData); Debug.Log("id: " + userData.id); Debug.Log("name: " + userData.name); Debug.Log("age: " + userData.age); } ``` 在上面的代码中,我们先定义了一个 UserData 类,用于保存从 JSON 数据中解析出来的字段。然后使用 JsonUtility 的 `FromJson` 方法将 JSON 数据转换为 UserData 对象,并输出解析出来的字段。 需要注意的是,JsonUtility 只支持简单的 JSON 数据类型,如基本类型、数组和嵌套对象。如果需要解析复杂的 JSON 数据,需要使用第三方的 Json.NET 库。 2. 使用 Json.NET 库 Json.NET 是一个流行的 .NET 平台上的 JSON 序列化和反序列化库,支持各种复杂的 JSON 数据类型,使用起来非常方便。以下是一个使用 Json.NET 解析 JSON 数据的示例: ```csharp using Newtonsoft.Json; public void ParseJsonData(string jsonData) { JObject jObject = JsonConvert.DeserializeObject<JObject>(jsonData); int id = jObject["id"].ToObject<int>(); string name = jObject["name"].ToObject<string>(); int age = jObject["age"].ToObject<int>(); Debug.Log("id: " + id); Debug.Log("name: " + name); Debug.Log("age: " + age); } ``` 在上面的代码中,我们使用了 Json.NET 的 `DeserializeObject` 方法将 JSON 数据转换为 JObject 对象(JObject 是 Json.NET 中用于表示 JSON 对象的类)。然后使用 JObject 的索引器来获取字段的值,并使用 `ToObject` 方法将其转换为对应的类型。 需要注意的是,使用 Json.NET 库需要先安装 Newtonsoft.Json 包。可以在 Unity 的 Package Manager 中搜索 "Json.NET" 并安装即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iteapoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值