在Unity中的使用Json

1.什么是Json?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

2.JSON 语法规则

–数据在键值对中
–数据由逗号分隔
–花括号保存对象
–方括号保存数组

3.Json的结构

–对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
–数组:数组在js中是中括号“[]”括起来的内容,数据结构为 [“java”,“javascript”,“vb”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

4.Json在Unity3d中的使用

1. JsonUtility
JsonUtility.FromJson():把json字符串转成对象.
JsonUtility.ToJson():把对象转成json字符串.

JsonUtility

[Serializable]
public class Person{
    public string name;
    public int age;
}

public class Persons{
    public Person[] persons;
}


public class JsonUtilityDemo:MonoBehaviour{

    void Start(){
        //使用代码生成一个json
        //{'name':'李逍遥','age':25}
        Person p1 = new Person();
        p1.name = "李逍遥";
        p1.age = 25;

        string jsonStr = JsonUtility.ToJson(p1);
        //Debug.Log(jsonStr);


        //{'persons':[{'name':'李逍遥','age':25},{'name':'王小虎','age':7}]}
        Person p2 = new Person();
        p1.name = "王小虎";
        p1.age = 7;

        Person[] ps = new Person[]{p1,p2};
        Persons persons = new Persons();
        persons.persons = ps;

        string jsonStr = JsonUtility.ToJson(persons);
        //Debug.Log(jsonStr);



        //解析Json
        //{'persons':[{'name':'李逍遥','age':25},{'name':'王小虎','age':7}]}
        Persons newPersons = JsonUtility.FromJson<Persons>(jsonStr);
        Debug.Log(newPersons.persons[0].name);
    }

}

2/. LitJson:

LitJson是一个Json的开源项目,这个比较稳定,推荐使用,官网:http://lbv.github.io/litjson/下载LitJson.dll(没有vpn的亲:链接:http://pan.baidu.com/s/1i57ozml 密码:eyd4)

JsonMapper.ToObject():把json字符串转成对象.
JsonMapper.ToJson():把对象转成json字符串.

使用时,dll文件要放在Plugins文件夹下,代码访问时要引用命名空间:using LitJson;

示例代码:

1/ 解析json:

public void ResolveJson()  
    {  
                 //定义的JSON字符串,注意JSON的格式  
         string str = @"  
            {  
                ""Name""     : ""yusong"",  
                ""Age""      : 26,  
                ""Birthday"" : ""1986-11-21"",  
                ""Thumbnail"":[  
                {  
                    ""Url"":    ""http://xuanyusong.com"",  
                    ""Height"": 256,  
                    ""Width"":  ""200""  
                },  
                {  
                    ""Url"":    ""http://baidu.com"",  
                    ""Height"": 1024,  
                    ""Width"":  ""500""  
                }  
   
                ]  
            }";  
        //这里是解析,包括整形与字符串  
        JsonData jd = JsonMapper.ToObject(str);  
        Debug.Log("name = " + (string)jd["Name"]);  
        Debug.Log("Age = " + (int)jd["Age"]);  
        Debug.Log("Birthday = " + (string)jd["Birthday"]);  
        JsonData jdItems = jd["Thumbnail"];   
   
        for (int i = 0; i < jdItems.Count; i++)  
        {  
            Debug.Log("URL = " + jdItems[i]["Url"]);  
            Debug.Log("Height = " + (int)jdItems[i]["Height"]);  
            Debug.Log("Width = " + jdItems[i]["Width"]);  
        }  
    }  

运行结果:
在这里插入图片描述

2.合成json:

public void MergerJson()  
    {  
        StringBuilder sb = new StringBuilder ();  
        JsonWriter writer = new JsonWriter (sb);  
   
        writer.WriteObjectStart ();  
   
        writer.WritePropertyName ("Name");  
        writer.Write ("yusong");  
   
        writer.WritePropertyName ("Age");  
        writer.Write (26);  
   
        writer.WritePropertyName ("Girl");  
   
        writer.WriteArrayStart ();  
   
        writer.WriteObjectStart();  
        writer.WritePropertyName("name");  
        writer.Write("ruoruo");  
        writer.WritePropertyName("age");  
        writer.Write(24);  
        writer.WriteObjectEnd ();  
   
        writer.WriteObjectStart();  
        writer.WritePropertyName("name");  
        writer.Write("momo");  
        writer.WritePropertyName("age");  
        writer.Write(26);  
        writer.WriteObjectEnd ();  
   
        writer.WriteArrayEnd();  
   
        writer.WriteObjectEnd ();  
        Debug.Log(sb.ToString ());  
   
        JsonData jd = JsonMapper.ToObject(sb.ToString ());  
        Debug.Log("name = " + (string)jd["Name"]);  
        Debug.Log("Age = " + (int)jd["Age"]);  
        JsonData jdItems = jd["Girl"];  
        for (int i = 0; i < jdItems.Count; i++)  
        {  
            Debug.Log("Girl name = " + jdItems[i]["name"]);  
            Debug.Log("Girl age = " + (int)jdItems[i]["age"]);  
        }  
    }  

结果:
在这里插入图片描述

注意:

使用LitJson解析时,解析类时
若包含Dictionary结构,则key的类型必须是string,而不能是int类型(如需表示id等),否则无法正确解析!
若需要小数,要使用double类型,而不能使用float,可后期在代码里再显式转换为float类型。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity 可以使用 .NET 的 System.Json 命名空间来处理 JSON。您可以使用 JsonDocument 类来解析 JSON 字符串,然后使用 JsonElement 类来访问 JSON 元素。 例如,下面的代码演示了如何解析一个包含数组的 JSON 字符串: ``` string jsonString = "{\"array\":[1,2,3,4,5]}"; JsonDocument json = JsonDocument.Parse(jsonString); JsonElement array = json.RootElement.GetProperty("array"); foreach (var element in array.EnumerateArray()) { Console.WriteLine(element.GetInt32()); } ``` 如果您想将 JSON 序列化为 C# 对象,您可以使用 JsonSerializer 类。例如: ``` string jsonString = "{\"name\":\"John Smith\",\"age\":30,\"city\":\"New York\"}"; Person person = JsonSerializer.Deserialize<Person>(jsonString); Console.WriteLine($"Name: {person.Name}, Age: {person.Age}, City: {person.City}"); ``` 其,Person 是一个包含 name、age 和 city 属性的类。 希望这能帮到您。 ### 回答2: 在Unity使用JSON有几个步骤: 1. 创建一个包含JSON数据的字符串。可以手动创建字符串,也可以从外部文件读取。 2. 创建一个可以将JSON字符串解析为对象的类。可以使用JsonUtility类的相关方法进行解析。需要确保类的属性与JSON数据的键名完全匹配。 3. 将JSON字符串传递给JsonUtility类的相关方法,将其解析为对象。可以使用JsonUtility.FromJson()方法将JSON字符串解析为对象。解析完成后,可以使用对象的属性来访问JSON的数据。 4. 将数据从对象提取出来并在Unity使用。可以使用对象的属性和方法,来获取和处理JSON数据。 下面是一个简单的示例: 首先,创建一个包含JSON数据的字符串: ``` string json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; ``` 然后,创建一个可以将JSON字符串解析为对象的类: ```csharp [System.Serializable] public class Person { public string name; public int age; public string city; } ``` 接下来,将JSON字符串解析为对象: ```csharp Person person = JsonUtility.FromJson<Person>(json); ``` 最后,可以通过对象的属性来访问JSON的数据: ```csharp Debug.Log("Name: " + person.name); Debug.Log("Age: " + person.age); Debug.Log("City: " + person.city); ``` 这样就可以在Unity使用JSON数据了。需要注意的是,UnityJsonUtility类对于复杂的JSON结构或嵌套对象可能不够灵活,如果遇到这种情况,可以考虑使用第三方库如Newtonsoft.Json来解析和处理JSON。 ### 回答3: Unity使用JSON可以通过Unity自带的JsonUtility类来实现。 首先,需要引入命名空间 `using System.IO;` 和 `using UnityEngine;`。 然后,我们可以使用JsonUtility类的静态方法`JsonUtility.FromJson()`来将JSON字符串转换为对象,或使用`JsonUtility.ToJson()`将对象转换为JSON字符串。 例如,假设我们有一个名为`Player`的类,它有两个属性`name`和`score`: ```csharp [System.Serializable] public class Player { public string name; public int score; } ``` 我们可以将一个`Player`对象转换为JSON字符串: ```csharp Player player = new Player(); player.name = "Tom"; player.score = 100; string json = JsonUtility.ToJson(player); ``` 我们也可以将JSON字符串转换为`Player`对象: ```csharp string json = "{\"name\":\"Tom\",\"score\":100}"; Player player = JsonUtility.FromJson<Player>(json); ``` 注意,在使用`JsonUtility.FromJson()`方法时,需要确保类的属性名与JSON字符串的键名一致。 此外,还可以使用`JsonUtility.FromJsonOverwrite()`方法将JSON字符串的值直接覆盖到已存在的对象上,而不是创建新的对象。 综上所述,Unity使用JSON,我们可以通过JsonUtility类来进行对象与JSON字符串的相互转换。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值