UE4 Json解析方法与原理

这篇具有很好参考价值的文章主要介绍了UE4 Json解析方法与原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JsonObjectStringToUStruct 函数原理分析

作用是将Json字符串解析到UStruct中保存起来

  1. 初始化FJsonObject,初始化TJsonReader

  2. 将TJsonReader(Json字符串) 反序列化/解析 为FJsonObject

    逐块数据解析,每遇到一个'{'或'['就压栈并保存对应的Key,对每一个字符串/数字/布尔/Null类型的值就直接保存,每遇到一个'}'或']'就出栈,最终形成一个以StackState为结点的多叉树。最后根据是否有最外层的大括号,将返回FJsonValueObject或FJsonValueArray。

  3. 将FJsonObject解析到UStruct中保存

    递归遍历UStruct的每一个可反射参数,查找FJsonObject中是否存在对应的Key,若存在,直接根据类型赋值,不存在则跳过

UStructToJsonObjectString原理

将UStruct序列化为Json格式字符串。原理是上一个函数的逆过程,不再展开。

可被Json解析到UStruct的类型,结构体成员需要为UE4可反射的类型

FEnumProperty:枚举类型,需要值为枚举参数对应的字符串名称

FNumericProperty:double/int64类型,当值为数值参数时使用double解析,当值为字符串时使用int64解析,最后将解析完成的参数保存到传入的类型(长整数是使用double解析,可能出现精度问题,此时需要传入字符串)

FBoolProperty:bool类型,值为true/True/flase/Flase

FStrProperty:FString类型,值为字符串类型(注意转义字符)

FArrayProperty:TArray类型,值为数组

FMapProperty:TMap类型,值为一个Object,但是对象内部每个成员的类型都需要与TMap相同,键为字符串,值为对应的数据结构

FSetProperty:TSet类型,值为数组,要求数值内部的每个成员是同一种类型

FTextProperty:FText类型,值为字符串或Object,若为Object则该Object需要是特殊的专门为FText设置的对象

FStructProperty:FStruct类型,值为Object或字符串,当值为Object时按照正常的流程递归解析,当值为字符串时进入UE4特殊的解析途径。若解析后的参数类型是FDataTime/FColor/FLinearColor类型时,可以由特定格式的字符串解析后得到

FObjectProperty:UObject类型,还没看懂!!

Json解析过程中使用到的结构体/枚举类型解释

EJson:支持的Json语法类型(全支持),StackState当前对应的Json结构

TJsonReader:用来保存并读取Json字符串

FJsonObject:用于保存大括号内部的每一个键值对,为树状结构

EJsonNotation:标记当前字符串解析的状态

StackState:积累Json的每一个键值对,值为任何允许的类型

总结与注意

  1. 使用Json解析方法需要在.cs文件中添加“JSONUTILITIES”与“JSON”模块。

  1. 解析所有Json数值类型数据都是使用的double解析,需要注意浮点精度问题

  2. 解析后的参数类型不一定与Json数据类型对应,参考我的第三段内容

  3. 只有可以被反射的UStruct成员才能参与Json解析,否则忽略

  4. Json中存在而UStruct不存在的参数或UStruct中存在而Json不存在的参数均被忽略

  5. Json解析可能非常损耗性能(文本可能巨大),尽量少调用且最好放在异步线程,不需要的Json参数不要写在UStruct中参与解析

  6. 在需要多次解析一个Json的地方,请不要直接将Json转换成UStruct,而因该转换成FJsonObject作为缓存,然后从FJsonObject转换成需要的UStruct

作者:张行,邮箱:2252313806@qq.com文章来源地址https://www.toymoban.com/news/detail-490352.html

到了这里,关于UE4 Json解析方法与原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE4 源码解析----引擎初始化流程

       在研究UE4的源码过程中着实不理解的地方有很多,今天给大家分享一下UE4引擎的初始化流程。 C++的函数入口都是Main() 函数入口,UE4也是一样,EngineSourceRuntimeLaunchPrivate Windows函数入口  引擎入口函数为:GuardedMain UE4所有相关的代码都在游戏循环函数中,在Launch.cpp中,写

    2024年02月06日
    浏览(77)
  • UE4蓝图之函数、事件、宏的区别

    语法区别 执行引脚的区别: 函数允许有一个执行引脚和一个输出引脚 事件只允许有一个执行引脚 宏允许有多个执行引脚和读个输出引脚 返回值 函数和宏允许有返回值,而事件没有返回值 需要注意的是: 函数可以有返回值也可以没有,如果我们不给函数设置任何返回值时

    2023年04月18日
    浏览(35)
  • 无主之地3出现UE4崩溃怎么办?无主之地3出现UE4崩溃深入解析原因及解决方案

    无主之地3(Borderlands 3)出现UE4崩溃,通常指的是游戏运行时基于虚幻引擎4(Unreal Engine 4,简称UE4)开发的部分出现崩溃现象。 下面一起来看看原因及解决方法介绍吧! 原因 1. 驱动程序问题:•显卡驱动程序过时或不兼容可能导致UE4崩溃。确保您的显卡驱动是最新的,并且

    2024年04月09日
    浏览(42)
  • UE4_动画基础_动画重定位原理

    动画重定位  是一种允许 在共用相同骨架资源但比例差异很大的角色之间复用动画 的功能。通过重定位,可以防止生成动画的骨架在使用来自不同外形的角色的动画时丢失比例或产生不必要的变形。 通过动画重定位, 还可以在使用 不同骨架 资源的角色之间共享动画 ,前

    2024年04月23日
    浏览(29)
  • (UE4 4.27) UHierarchicalInstancedStaticMesh(HISM)原理分析

    游戏开发中的植被管理一直是个棘手的问题,因为植被数量庞大,对于剔除(CPU)和渲染(GPU)都存在很大的压力。 UE4的植被有一套独特的管理方式, 是基于 UHierarchicalInstancedStaticMeshComponent组件实现了植被的视椎体剔除和合批渲染。 UFoliageInstancedStaticMeshComponent下面简称FSM. UHierarc

    2024年02月09日
    浏览(37)
  • 【虚幻引擎】UE4源码解析FWorldContent、UWorld、ULevel、UGameInstance、UEngine

    Engine,因为也是很基础的类,再加上开发过程中会经常访问到该类型,因此UE4引擎也在代码全局范围内定义了一个该类型的全局变量:UEngine* GEngine供开发者直接调用。该最基础的类型分化成了两个子类:UGameEngine和UEditorEngine。 UGameEngine保存了唯一的一个UGameInstance* GameInstanc

    2024年02月16日
    浏览(33)
  • 【UE4】查找Actor的方法(蓝图)

    Get All Actors Of Class :通过给定的对象模板将场景中与之匹配的对象进行查找,并返回查找到的所有对象。 Get All Actors with Interface :通过给定的接口将场景中与之匹配的对象进行查找,并返回查找到的所有对象。 Get All Actors with Tag :通过给定的标签将场景中与之匹配的对象进

    2024年02月12日
    浏览(30)
  • UE4遇到了 “warning MSB3245: 未能解析此引用。未能找到程序集“Windows”。

      打UE4包的时候,AutomationTool模块会出现 Failed to build, 导致打包失败。  遇到这种情况一般是对AutomationTool模块,鼠标右键点击,重新生成。  但是在生成的时候发现了warning MSB3245:未能解析此引用。未能找到程序集“Windows”的警告,和缺少程序集引用的报错。  这种问题的

    2024年02月16日
    浏览(35)
  • 菜鸡shader:L4三色环境光原理妙用并在ue4中实现

    我的上一篇博客写了关于三色环境光的原理,这次就来简单拓展一下。最重要的核心思想其实就是取法线向量的第二个分量,因为它控制方法是指向xz平面的上或者下。 所以这次要用这个原来来单独摘出上层环境光,乘上菲涅尔,会有种高光的感觉。先放个图,还是小人模型

    2024年02月16日
    浏览(28)
  • UE4 设置视角模糊的4种方法

    1、PostProcessVolume 100是刚好清晰,100一下开始模糊,越小越模糊 效果图如下: 该值越大越模糊 效果图如下: 还有一种就是用CineCamera设置焦距来获取视角模糊  最后一种与后期盒子类似,调整Camera的屏幕分辨率 

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包