最近遇到了新的需求。由于后端人员数据不规范,导致本该是数组的部分被构建成了对象。由于unity自带的json工具JsonUtility必须要构建相同的类结构才能反序列化,所以这样就出现了一个问题,即数字无法成为参数。我们无法构建这样的数据格式。那就没办法了。只能选择键值对的方式来获取数据
目前支持全平台编译的json工具库比较有名的有三个,分别是:JsonUtility、 newtonjson 还有 LitJson 。 其中newtonjson体积过于庞大(250k),而JsonUtility又不支持键值对。所以我们只能选择使用LitJson
如果有对JsonUtility感兴趣的可以看我这篇教程 《unity json处理方式 之 JsonUtility 支持包括webgl在内的全平台》
首先到 LitJson官网 下载unity的package包
下载完成后,在unity项目打开的情况等下,双击进行package进行资源导入。
LitJson有多个使用方式。方式之一就是数据结构序列化。与JsonUtility一样,我们需要根据json构建数据结构。
// 数据结构样例 using LitJson; // 创建数据结构 本质就是类 [Serializable] public class Person public string name; public int id; public class JsonTest{ // 从对象转换成json数据的方法 public void ObjectToJson() // 实例化数据对象 Person persion1 = new Person(); // 数据对象赋值 persion1.name = "特朗普"; persion1.id = 748; // 将数据对象转为字符串 string jsonStr = JsonMapper.ToJson(persion1); Debug.Log("转换后的json字符串是:" + jsonStr); //json字符串转为对象 Person persion2 = JsonMapper.ToObject<Person>(jsonStr); Debug.Log("字符串转化成对象后的name数据:" + persion2.name); 2.1.2 json数据专为object // 数据结构样例 using LitJson; public class JsonTest{ // 从对象转换成json数据的方法 public void ObjectToJson() // 要转换的json数据 string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, //json字符串转为对象 Person persion2 = JsonMapper.ToObject<Person>(jsonStr); Debug.Log("字符串转化成对象后的name数据:" + persion2.name); 2.2 键值对方式 这是使用最简便的方式。由于使用key>value的方式创建或获取,所以无法再数据结构中加入相应的处理方法。所以使用这种方式一般强调的就只是数据的获取 2.2.1 json的构建 与2.1.1同 2.2.2 json的解析 using LitJson; // 定义一个json字符串 public class jsonTest{ public void GetJsonData(){ string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, ""1"":[ ""n1"" : ""n1"", ""n2"" : 1 ""n1"" : ""n11"", ""n2"" : 2 // 解析json字符串 JsonData jsonData = JsonMapper.ToObject(jsonStr); // 根据json的对象名来获取数据 Debug.Log("name = " + (string)jsonData["name"]); Debug.Log("id = " + (int)jsonData["id"]); // 有经验的程序员都知道,就算支持也不要用纯数组做对象名!!! JsonData jsonData_array = jsonData["1"]; // 遍历获取数组数据 for (int i = 0; i < jsonData_array.Count; i++) Debug.Log("n1 = " + jsonData_array[i]["n1"]); Debug.Log("n2 = " + (int)jsonData_array[i]["n2"]); 关于float,int,等类型的转换问题 有时从json数据转换到float和int时,会产生转换问题,同一个属性,有时系统说是浮点,有时说是整数。 这时只需使用Conver.toXXX(jsondataObject.toString()); 即可成功专用换。重点是先转换成字符串,再转换成数字! 最近遇到了新的需求。由于后端人员数据不规范,导致本该是数组的部分被构建成了对象。由于unity自带的json工具JsonUtility必须要构建相同的类结构才能反序列化,所以这样就出现了一个问题,即数字无法成为参数。我们无法构建这样的数据格式。那就没办法了。只能选择键值对的方式来获取数据目前支持全平台编译的json工具库比较有名的有三个,分别是:JsonUtility、newtonjson还有LitJson。其中newtonjson体积过于庞大(250k),而JsonUtility又不支持键值对。所以我 unity Application 本地目录资源路径详解 Application.StreamingAssetsPath、Application.PersistentDataPath等 弹吉他的少年郎: beautiful unity shader 自定义定时器函数 interval little_fat_sheep: 【Unity3D】Shader常量、变量、结构体、函数 https://blog.csdn.net/m0_37602827/article/details/128980596 unity 公路插件 EasyRoads3D Pro 使用干货教程 qq_35016663: 我也遇到这个问题了,特意新建了一个工程,在新建的工程中一切正常,但是原来的工程中按住Shift创建不出来,是不是因为Easy Road与原先的工程中的有冲突? Unity ShaderLab特效教程 着色器实例 代码+注释 【描边着色器】 little_fat_sheep: 【Unity3D】选中物体描边特效 https://zhyan8.blog.csdn.net/article/details/127937019 【Unity3D】基于模板测试和顶点膨胀的描边方法 https://zhyan8.blog.csdn.net/article/details/128721982
// 数据结构样例 using LitJson; // 创建数据结构 本质就是类 [Serializable] public class Person public string name; public int id; public class JsonTest{ // 从对象转换成json数据的方法 public void ObjectToJson() // 实例化数据对象 Person persion1 = new Person(); // 数据对象赋值 persion1.name = "特朗普"; persion1.id = 748; // 将数据对象转为字符串 string jsonStr = JsonMapper.ToJson(persion1); Debug.Log("转换后的json字符串是:" + jsonStr); //json字符串转为对象 Person persion2 = JsonMapper.ToObject<Person>(jsonStr); Debug.Log("字符串转化成对象后的name数据:" + persion2.name);
2.1.2 json数据专为object // 数据结构样例 using LitJson; public class JsonTest{ // 从对象转换成json数据的方法 public void ObjectToJson() // 要转换的json数据 string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, //json字符串转为对象 Person persion2 = JsonMapper.ToObject<Person>(jsonStr); Debug.Log("字符串转化成对象后的name数据:" + persion2.name); 2.2 键值对方式 这是使用最简便的方式。由于使用key>value的方式创建或获取,所以无法再数据结构中加入相应的处理方法。所以使用这种方式一般强调的就只是数据的获取 2.2.1 json的构建 与2.1.1同 2.2.2 json的解析 using LitJson; // 定义一个json字符串 public class jsonTest{ public void GetJsonData(){ string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, ""1"":[ ""n1"" : ""n1"", ""n2"" : 1 ""n1"" : ""n11"", ""n2"" : 2 // 解析json字符串 JsonData jsonData = JsonMapper.ToObject(jsonStr); // 根据json的对象名来获取数据 Debug.Log("name = " + (string)jsonData["name"]); Debug.Log("id = " + (int)jsonData["id"]); // 有经验的程序员都知道,就算支持也不要用纯数组做对象名!!! JsonData jsonData_array = jsonData["1"]; // 遍历获取数组数据 for (int i = 0; i < jsonData_array.Count; i++) Debug.Log("n1 = " + jsonData_array[i]["n1"]); Debug.Log("n2 = " + (int)jsonData_array[i]["n2"]); 关于float,int,等类型的转换问题 有时从json数据转换到float和int时,会产生转换问题,同一个属性,有时系统说是浮点,有时说是整数。 这时只需使用Conver.toXXX(jsondataObject.toString()); 即可成功专用换。重点是先转换成字符串,再转换成数字! 最近遇到了新的需求。由于后端人员数据不规范,导致本该是数组的部分被构建成了对象。由于unity自带的json工具JsonUtility必须要构建相同的类结构才能反序列化,所以这样就出现了一个问题,即数字无法成为参数。我们无法构建这样的数据格式。那就没办法了。只能选择键值对的方式来获取数据目前支持全平台编译的json工具库比较有名的有三个,分别是:JsonUtility、newtonjson还有LitJson。其中newtonjson体积过于庞大(250k),而JsonUtility又不支持键值对。所以我 unity Application 本地目录资源路径详解 Application.StreamingAssetsPath、Application.PersistentDataPath等 弹吉他的少年郎: beautiful unity shader 自定义定时器函数 interval little_fat_sheep: 【Unity3D】Shader常量、变量、结构体、函数 https://blog.csdn.net/m0_37602827/article/details/128980596 unity 公路插件 EasyRoads3D Pro 使用干货教程 qq_35016663: 我也遇到这个问题了,特意新建了一个工程,在新建的工程中一切正常,但是原来的工程中按住Shift创建不出来,是不是因为Easy Road与原先的工程中的有冲突? Unity ShaderLab特效教程 着色器实例 代码+注释 【描边着色器】 little_fat_sheep: 【Unity3D】选中物体描边特效 https://zhyan8.blog.csdn.net/article/details/127937019 【Unity3D】基于模板测试和顶点膨胀的描边方法 https://zhyan8.blog.csdn.net/article/details/128721982
// 数据结构样例 using LitJson; public class JsonTest{ // 从对象转换成json数据的方法 public void ObjectToJson() // 要转换的json数据 string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, //json字符串转为对象 Person persion2 = JsonMapper.ToObject<Person>(jsonStr); Debug.Log("字符串转化成对象后的name数据:" + persion2.name); 2.2 键值对方式 这是使用最简便的方式。由于使用key>value的方式创建或获取,所以无法再数据结构中加入相应的处理方法。所以使用这种方式一般强调的就只是数据的获取 2.2.1 json的构建 与2.1.1同 2.2.2 json的解析 using LitJson; // 定义一个json字符串 public class jsonTest{ public void GetJsonData(){ string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, ""1"":[ ""n1"" : ""n1"", ""n2"" : 1 ""n1"" : ""n11"", ""n2"" : 2 // 解析json字符串 JsonData jsonData = JsonMapper.ToObject(jsonStr); // 根据json的对象名来获取数据 Debug.Log("name = " + (string)jsonData["name"]); Debug.Log("id = " + (int)jsonData["id"]); // 有经验的程序员都知道,就算支持也不要用纯数组做对象名!!! JsonData jsonData_array = jsonData["1"]; // 遍历获取数组数据 for (int i = 0; i < jsonData_array.Count; i++) Debug.Log("n1 = " + jsonData_array[i]["n1"]); Debug.Log("n2 = " + (int)jsonData_array[i]["n2"]); 关于float,int,等类型的转换问题 有时从json数据转换到float和int时,会产生转换问题,同一个属性,有时系统说是浮点,有时说是整数。 这时只需使用Conver.toXXX(jsondataObject.toString()); 即可成功专用换。重点是先转换成字符串,再转换成数字! 最近遇到了新的需求。由于后端人员数据不规范,导致本该是数组的部分被构建成了对象。由于unity自带的json工具JsonUtility必须要构建相同的类结构才能反序列化,所以这样就出现了一个问题,即数字无法成为参数。我们无法构建这样的数据格式。那就没办法了。只能选择键值对的方式来获取数据目前支持全平台编译的json工具库比较有名的有三个,分别是:JsonUtility、newtonjson还有LitJson。其中newtonjson体积过于庞大(250k),而JsonUtility又不支持键值对。所以我 unity Application 本地目录资源路径详解 Application.StreamingAssetsPath、Application.PersistentDataPath等 弹吉他的少年郎: beautiful unity shader 自定义定时器函数 interval little_fat_sheep: 【Unity3D】Shader常量、变量、结构体、函数 https://blog.csdn.net/m0_37602827/article/details/128980596 unity 公路插件 EasyRoads3D Pro 使用干货教程 qq_35016663: 我也遇到这个问题了,特意新建了一个工程,在新建的工程中一切正常,但是原来的工程中按住Shift创建不出来,是不是因为Easy Road与原先的工程中的有冲突? Unity ShaderLab特效教程 着色器实例 代码+注释 【描边着色器】 little_fat_sheep: 【Unity3D】选中物体描边特效 https://zhyan8.blog.csdn.net/article/details/127937019 【Unity3D】基于模板测试和顶点膨胀的描边方法 https://zhyan8.blog.csdn.net/article/details/128721982
// 数据结构样例 using LitJson; public class JsonTest{ // 从对象转换成json数据的方法 public void ObjectToJson() // 要转换的json数据 string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, //json字符串转为对象 Person persion2 = JsonMapper.ToObject<Person>(jsonStr); Debug.Log("字符串转化成对象后的name数据:" + persion2.name);
2.2 键值对方式 这是使用最简便的方式。由于使用key>value的方式创建或获取,所以无法再数据结构中加入相应的处理方法。所以使用这种方式一般强调的就只是数据的获取 2.2.1 json的构建 与2.1.1同 2.2.2 json的解析 using LitJson; // 定义一个json字符串 public class jsonTest{ public void GetJsonData(){ string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, ""1"":[ ""n1"" : ""n1"", ""n2"" : 1 ""n1"" : ""n11"", ""n2"" : 2 // 解析json字符串 JsonData jsonData = JsonMapper.ToObject(jsonStr); // 根据json的对象名来获取数据 Debug.Log("name = " + (string)jsonData["name"]); Debug.Log("id = " + (int)jsonData["id"]); // 有经验的程序员都知道,就算支持也不要用纯数组做对象名!!! JsonData jsonData_array = jsonData["1"]; // 遍历获取数组数据 for (int i = 0; i < jsonData_array.Count; i++) Debug.Log("n1 = " + jsonData_array[i]["n1"]); Debug.Log("n2 = " + (int)jsonData_array[i]["n2"]); 关于float,int,等类型的转换问题 有时从json数据转换到float和int时,会产生转换问题,同一个属性,有时系统说是浮点,有时说是整数。 这时只需使用Conver.toXXX(jsondataObject.toString()); 即可成功专用换。重点是先转换成字符串,再转换成数字! 最近遇到了新的需求。由于后端人员数据不规范,导致本该是数组的部分被构建成了对象。由于unity自带的json工具JsonUtility必须要构建相同的类结构才能反序列化,所以这样就出现了一个问题,即数字无法成为参数。我们无法构建这样的数据格式。那就没办法了。只能选择键值对的方式来获取数据目前支持全平台编译的json工具库比较有名的有三个,分别是:JsonUtility、newtonjson还有LitJson。其中newtonjson体积过于庞大(250k),而JsonUtility又不支持键值对。所以我 unity Application 本地目录资源路径详解 Application.StreamingAssetsPath、Application.PersistentDataPath等 弹吉他的少年郎: beautiful unity shader 自定义定时器函数 interval little_fat_sheep: 【Unity3D】Shader常量、变量、结构体、函数 https://blog.csdn.net/m0_37602827/article/details/128980596 unity 公路插件 EasyRoads3D Pro 使用干货教程 qq_35016663: 我也遇到这个问题了,特意新建了一个工程,在新建的工程中一切正常,但是原来的工程中按住Shift创建不出来,是不是因为Easy Road与原先的工程中的有冲突? Unity ShaderLab特效教程 着色器实例 代码+注释 【描边着色器】 little_fat_sheep: 【Unity3D】选中物体描边特效 https://zhyan8.blog.csdn.net/article/details/127937019 【Unity3D】基于模板测试和顶点膨胀的描边方法 https://zhyan8.blog.csdn.net/article/details/128721982
这是使用最简便的方式。由于使用key>value的方式创建或获取,所以无法再数据结构中加入相应的处理方法。所以使用这种方式一般强调的就只是数据的获取
与2.1.1同
using LitJson; // 定义一个json字符串 public class jsonTest{ public void GetJsonData(){ string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, ""1"":[ ""n1"" : ""n1"", ""n2"" : 1 ""n1"" : ""n11"", ""n2"" : 2 // 解析json字符串 JsonData jsonData = JsonMapper.ToObject(jsonStr); // 根据json的对象名来获取数据 Debug.Log("name = " + (string)jsonData["name"]); Debug.Log("id = " + (int)jsonData["id"]); // 有经验的程序员都知道,就算支持也不要用纯数组做对象名!!! JsonData jsonData_array = jsonData["1"]; // 遍历获取数组数据 for (int i = 0; i < jsonData_array.Count; i++) Debug.Log("n1 = " + jsonData_array[i]["n1"]); Debug.Log("n2 = " + (int)jsonData_array[i]["n2"]); 关于float,int,等类型的转换问题 有时从json数据转换到float和int时,会产生转换问题,同一个属性,有时系统说是浮点,有时说是整数。 这时只需使用Conver.toXXX(jsondataObject.toString()); 即可成功专用换。重点是先转换成字符串,再转换成数字! 最近遇到了新的需求。由于后端人员数据不规范,导致本该是数组的部分被构建成了对象。由于unity自带的json工具JsonUtility必须要构建相同的类结构才能反序列化,所以这样就出现了一个问题,即数字无法成为参数。我们无法构建这样的数据格式。那就没办法了。只能选择键值对的方式来获取数据目前支持全平台编译的json工具库比较有名的有三个,分别是:JsonUtility、newtonjson还有LitJson。其中newtonjson体积过于庞大(250k),而JsonUtility又不支持键值对。所以我 unity Application 本地目录资源路径详解 Application.StreamingAssetsPath、Application.PersistentDataPath等 弹吉他的少年郎: beautiful unity shader 自定义定时器函数 interval little_fat_sheep: 【Unity3D】Shader常量、变量、结构体、函数 https://blog.csdn.net/m0_37602827/article/details/128980596 unity 公路插件 EasyRoads3D Pro 使用干货教程 qq_35016663: 我也遇到这个问题了,特意新建了一个工程,在新建的工程中一切正常,但是原来的工程中按住Shift创建不出来,是不是因为Easy Road与原先的工程中的有冲突? Unity ShaderLab特效教程 着色器实例 代码+注释 【描边着色器】 little_fat_sheep: 【Unity3D】选中物体描边特效 https://zhyan8.blog.csdn.net/article/details/127937019 【Unity3D】基于模板测试和顶点膨胀的描边方法 https://zhyan8.blog.csdn.net/article/details/128721982
using LitJson; // 定义一个json字符串 public class jsonTest{ public void GetJsonData(){ string jsonStr = @" ""name"" : ""alex"", ""id"" : 131231232, ""1"":[ ""n1"" : ""n1"", ""n2"" : 1 ""n1"" : ""n11"", ""n2"" : 2 // 解析json字符串 JsonData jsonData = JsonMapper.ToObject(jsonStr); // 根据json的对象名来获取数据 Debug.Log("name = " + (string)jsonData["name"]); Debug.Log("id = " + (int)jsonData["id"]); // 有经验的程序员都知道,就算支持也不要用纯数组做对象名!!! JsonData jsonData_array = jsonData["1"]; // 遍历获取数组数据 for (int i = 0; i < jsonData_array.Count; i++) Debug.Log("n1 = " + jsonData_array[i]["n1"]); Debug.Log("n2 = " + (int)jsonData_array[i]["n2"]);
关于float,int,等类型的转换问题 有时从json数据转换到float和int时,会产生转换问题,同一个属性,有时系统说是浮点,有时说是整数。 这时只需使用Conver.toXXX(jsondataObject.toString()); 即可成功专用换。重点是先转换成字符串,再转换成数字! 最近遇到了新的需求。由于后端人员数据不规范,导致本该是数组的部分被构建成了对象。由于unity自带的json工具JsonUtility必须要构建相同的类结构才能反序列化,所以这样就出现了一个问题,即数字无法成为参数。我们无法构建这样的数据格式。那就没办法了。只能选择键值对的方式来获取数据目前支持全平台编译的json工具库比较有名的有三个,分别是:JsonUtility、newtonjson还有LitJson。其中newtonjson体积过于庞大(250k),而JsonUtility又不支持键值对。所以我 unity Application 本地目录资源路径详解 Application.StreamingAssetsPath、Application.PersistentDataPath等 弹吉他的少年郎: beautiful unity shader 自定义定时器函数 interval little_fat_sheep: 【Unity3D】Shader常量、变量、结构体、函数 https://blog.csdn.net/m0_37602827/article/details/128980596 unity 公路插件 EasyRoads3D Pro 使用干货教程 qq_35016663: 我也遇到这个问题了,特意新建了一个工程,在新建的工程中一切正常,但是原来的工程中按住Shift创建不出来,是不是因为Easy Road与原先的工程中的有冲突? Unity ShaderLab特效教程 着色器实例 代码+注释 【描边着色器】 little_fat_sheep: 【Unity3D】选中物体描边特效 https://zhyan8.blog.csdn.net/article/details/127937019 【Unity3D】基于模板测试和顶点膨胀的描边方法 https://zhyan8.blog.csdn.net/article/details/128721982
有时从json数据转换到float和int时,会产生转换问题,同一个属性,有时系统说是浮点,有时说是整数。 这时只需使用Conver.toXXX(jsondataObject.toString()); 即可成功专用换。重点是先转换成字符串,再转换成数字!