Udon Graph 基础教程-VRCJson使用指南
本期是VRCJson在UdonGraph的使用方法本期是VRCJson在UdonGraph的使用方法,我们可以通过DownloadString来下载JSON文件,再通过下文的方法来转化成DataToken,并使用DataToken来输出参数,本文将会详细解读如何使用Graph来完成这个过程。
UdonGraph:VRC JSON
https://creators.vrchat.com/worlds/udon/data-containers/vrcjson/
如何序列化/反序列化一个JSON文件
首先我们需要明白,VRC的Json文件以及后续的DataToken,Datalist,Dictionaries都不可以预设,即使使用custon List也只会生成一个空列表,不会提供任何的自定义空间,所以在我们需要手动在脚本中生成并写入Json。
反序列化:
如果我们已经拥有了一个JSON,我们可以使用VRCJson.TryDeserializeFromJson来反序列化出Data containers文件
VRCJson.TryDeserializeFromJson |
string输入 | bool,DataToken | 从 JSON 字符串输入创建 DataList 或 DataDictionary。如果成功,则返回 true,结果令牌将为 DataDictionary 或 DataList。如果不成功,这将返回 false 并放置一个错误,解释结果令牌中的问题是什么。 |
生成的DataToken并不可以直接用于获取参数,我们需要先将其转化为字典或者列表才可以进行下一步操作,你可以不必在此提前做好转化,只需要在您准备接入方法是调用Get XX即可,示例如下:
序列化:
如果我们拥有一个Data containers,我们需要将其以JSON的方式输出出去,我们可以使用VRCJson.TrySerializeToJson来序列化JSON
VRCJson.TrySerializeToJson |
DataToken 输入,JsonExportType | bool,DataToken 结果 | 尝试将 DataDictionary 或 DataList 转换为 JSON 字符串输出。如果成功,则返回 true,结果令牌将是包含最终 Json 的字符串。如果不成功,这将返回 false 并放置一个错误,解释结果令牌中的问题是什么。 |
序列化为 Json 时,您可以选择所需的 JsonExportType。如果您想要人类可读的内容,Beautify 会更好。如果您想要通过网络发送的紧凑内容,Minify 会更好。
- 美化:将每个元素展开为新行,并为每个深度添加一个选项卡。
- 缩小:将所有内容保持在一行中,并最大限度地减少空格。
如何获取DataToken中的数据
在从 DataToken 中获取值之前,你需要确定它包含什么类型,因为如果你尝试拉取一个不兼容的类型,它会让UdonBehaviour崩溃。有几种方法可以确保包含的类型与要提取的类型兼容。
- 您可以检查属性以获取确切的类型
DataToken.TokenType
- 从 Data List 或 Data Dictionary 中检索值时,您可以使用并指定 TokenType。如果 TokenType 不正确,则该函数将返回 false。
TryGetValue
- 您可以检查属性以获取它是否为数字。如果是这样,那么你可以安全地拉取 property ,这将为你提供一个 double upcasted 无论它实际上是哪种类型。如果类型为 或 ,则可能会丢失精度。
DataToken.IsNumber
Number
long
ulong
- 无论令牌的类型如何,它始终是一个有效的选项,并且永远不会引发错误。
ToString
你可以直接使用Get来获取数据
当Json中包含了复数的参数时如何获取正确的参数
我们可以通过DataList来获得指定层数下的DataToken,然后再通过get XX来获得我们需要的参数,如下:
获取第一层的参数
如果我们的Json在一层中拥有多个参数,我们可以使用Data Dictionary来获取KEY名称对应的参数,如下:
或者我们也可以反过来,先使用Data Dictionary对DataList进行切割,将其切割成多个DataToken,同层级的数据index值也是一样的。就可以实现分割JSON的效果,然后我们再顺序读取并放入Array中,就完成了DataToken to Array的过程。