Skip to main content

Udon Graph 基础教程-VRCJson使用指南

本期是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文件

364ad0d3ac9ec562c5bbae23f651cd9d.png

VRCJson.TryDeserializeFromJson

string输入 bool,DataToken 从 JSON 字符串输入创建 DataList 或 DataDictionary。如果成功,则返回 true,结果令牌将为 DataDictionary 或 DataList。如果不成功,这将返回 false 并放置一个错误,解释结果令牌中的问题是什么。

生成的DataToken并不可以直接用于获取参数,我们需要先将其转化为字典或者列表才可以进行下一步操作,你可以不必在此提前做好转化,只需要在您准备接入方法是调用Get XX即可,示例如下:

VRCJson会根据输入的Json来生成字典和列表中的一个。

0cb33795e2927bb61bfc7702a9c06360.png

序列化:

如果我们拥有一个Data containers,我们需要将其以JSON的方式输出出去,我们可以使用VRCJson.TrySerializeToJson来序列化JSON

5797524ed71b6feb06125cdfd7689adb.png

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.IsNumberNumberlongulong
  • 无论令牌的类型如何,它始终是一个有效的选项,并且永远不会引发错误。ToString

2f0f08ad069091eb2730fcef1453600b.png

你可以直接使用Get来获取数据

当Json中包含了复数的参数时如何获取正确的参数

我们可以通过DataList来获得指定层数下的DataToken,然后再通过get XX来获得我们需要的参数,如下:

image.png

获取第一层的参数

如果我们的Json在一层中拥有多个参数,我们可以使用Data Dictionary来获取KEY名称对应的参数,如下:

9580ff09ce6e111b8dd0a8d1a8d57df3.png

或者我们也可以反过来,先使用Data Dictionary对DataList进行切割,将其切割成多个DataToken,同层级的数据index值也是一样的。就可以实现分割JSON的效果,然后我们再顺序读取并放入Array中,就完成了DataToken to Array的过程。