json - 统一的json解析方法
问题描述
想在 Unity 中解析 json 但我不知道如何。
我要解析的 json 内容。
{
"route": {
"trafast": [
"path": [
[
0,
0
],
[
1,
1
],
[
1,
2
]
]
]}}
我必须解析“路径”的内容。
这是我正在编写的代码。
public static T[] drivingFromJson<T>(string json)
{
drivingWrapper<T> wrapper = UnityEngine.JsonUtility.FromJson<drivingWrapper<T>>(json);
return wrapper.trafast;
}
[Serializable]
private class drivingWrapper<T>
{
public T[] trafast;
}
[System.Serializable]
public class DrivingTrafast
{
public PathData[] trafast;
}
[System.Serializable]
public class PathData
{
public TrafastPath[] path;
}
[System.Serializable]
public class TrafastPath
{
public string[] tp;
}
我不知道如何在“路径”中进行安排。告诉我描述和方法。
解决方案
首先,您不能T
在以下位置使用泛型()JsonUtility
:
支持的类型
API 支持任何带有属性的
MonoBehaviour
-subclass、ScriptableObject
-subclass 或普通class
/ 。你传入的对象会被送入 标准的 Unity 序列化器进行处理,因此与 Inspector 中的规则和限制相同;只有字段被序列化,不支持类似的类型。struct
[Serializable]
Dictionary<T>
当前不支持将其他类型直接传递给 API,例如原始类型或数组。现在,您需要将此类类型包装在某种类或结构中。
并来自Unity 序列化
如何确保自定义类可以序列化
确保:
有
[Serializable]
属性不是
abstract
不是
static
不是泛型,尽管它可能继承自泛型类
那么你的 JSON 结构是无效的......它应该是这样的
{
"route" : {
"trafast": [
{
"path" : [
[0,0], [1,1], [1,2]
]
}
]
}
}
trafast
包装with的元素{ }
(请参阅JSON 中的JSON 数据类型和嵌套数组)。
最后,您需要反映此 JSON 结构及其相应类型的 c# 布局。
您可以使用例如json2csharp作为起点,自动为给定的 JSON 生成相应的 c# 布局。您将需要创建所有类[Serializable]
并使用正确的字段而不是属性:
[Serializable]
public class RootObject
{
public Route route;
}
[Serializable]
public class Route
{
public List<Trafast> trafast;
}
[Serializable]
public class Trafast
{
public List<List<int>> path;
}
现在你可以使用
var json = "{\"route\" : {\"trafast\": [{\"path\" : [[0,0], [1,1], [1,2] ] } ] } }";
var rootObject = JsonUtility.FromJson<RootObject>(json);
推荐阅读
- jquery - 加载列表数据时加载微调器
- mysql - 无法设置关系 phpmyadmin
- asp.net - 使用 LINQ 的动态过滤器(EntityFramework)
- macos - 如何在 MacOS 10.15 中正确使用 EndpointSecurity API?
- bash - 系统中最大的文件并在 unix 中移动
- node.js - 使用串行端口启动电子脚本时出现符号查找错误
- javascript - 鼠标悬停事件处理程序在 d3 中不起作用?
- node.js - AWS Lambda - Runtime.ImportModuleError:错误:找不到模块“jmespath”
- roku - 如何在 Roku 中使用圆形图像视图..?
- java - Web 服务如何从 url Web 服务获取 wsdl