首先说一个也能序列化的插件 VaRest 这个能序列化能发请求,但是序列化这块不太好用,可能是我不怎么会用吧。。。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
正式介绍一下今天的主角插件 JsonBlueprint
是免费的!是免费的!是免费的!
虚幻商城 搜索 json
就是这个插件啦~~~
说实话我真的没找到api。。。
虽然我感觉所有api在他的图片预览里面已经出现了,但是琢磨这玩意也要一会儿,挺麻烦的(其实更方便自己)
写个常规操作指南还是比较方便的
(安装:安装到引擎->进项目->编辑->插件->启用插件->重启)
(安装:安装到引擎->进项目->Edit->Plugins->Enable->RestartNow)
好了安装成功
----------------------------------------------------------------正文开始---------------------------------------------------------
先介绍常用节点吧
1.make节点,用于将各类基础数据类型转换成插件识别的对象
2.创建json对象 纯函数 JsonMake 这个对象就是一个{}
3.创建json键值对 纯函数 JsonMakeField
json Object就是2里面的json对象
field Name 是键的名称
value 是由1创建出来的统一值
4.用于查看是否拥有该键 纯函数 JsonHasField
5.序列化为字符串 ToString(JsonObject)
还有挺多比较高级的节点,比如setField makeMap等等节点,大家按需折腾吧~~我就不展开了
---------------------------------------------------------常规使用案例---------------------------------------------------------
这里做一个常规使用案例,基本足够各位正常序列化需求,方便储存信息
首先我们创建一个简单的结构体吧
我们来序列化一个 Person的数组
先创建数组
进行序列化循环
整体思路就是用jsonMake进行转换,然后放入键值对
这里有个地方需要大家注意
需要创建一个json对象用来承载这四个数据类型
所以就需要使用到 jsonMake 创建一个对象
之后的JsonMakeField需要传入一个json对象 并且返回组装后的json对象
最后将这返回后的 json对象进行 JsonMakeObject 对象化
然后存放到一个Json对象数据组
循环完成后将数组转化为对象并且序列化为字符串
看一下输出结果
{"personArray":[{"name":"翠花","age":18,"isMan":false,"position":[0,0,0]},{"name":"西施","age":20,"isMan":false,"position":[0,0,0]},{"name":"张三","age":35,"isMan":true,"position":[0,0,0]},{"name":"李四","age":25,"isMan":true,"position":[0,0,0]}]}
校验一下 木得问题
为了方便查看,摆了摆截一张整图
下面进行反向序列化为对象
核心思路就是讲数据按照名称拆分之后重新组装
将刚才输出的结果保存为变量 Result 方便操作
首先将json字符串转换为json对象
一定要注意节点名称是下面这个
然后判断一下这个json对象内是否有该键,可以用JsonHasField来判断一下,防止报错
(当然你有把握也可以不写,这里我只写一次)
我刚才封装的数组对象名为 personArray 可以在上面序列化蓝图里面看到
下一步需要将进行转换
将这个json对象通过 ToJsonValue 转换为json对象
这个节点是需要键名的,而且因为第一层是person的数组,所以要转换为数组
当然是用数组节点的
展开后循环获取每一层的对象
然后进行对象拆分,之后再是用ToJsonValue来分解数据,然后再通过对应的类型转换
将json对象转换为对应类型就可以正常使用了
这里有一点一定要注意,从数组中拿到的obj也是要进行 ToJsonObject 操作之后才可以使用
蓝图样子很普通
废话有点多,下面直接上蓝图~~~(真的很容易忘,昨天用的,今天忘得一干二净。。。)
看一下结果
~~~搞定
最后说一下,这个插件还能使用的更复杂,层次更多,我这里就不演示了
支持字典就证明可以组装的更骚气,然而解析也很费力。。。谁让我不会c++
--------------------------------------------------------------------------------
追加更新:
上面的字符串如果只是纯数组
例如:
[{"name":"河北","value":"123123"},{"name":"河南","value":"7777"}]
这个插件就解析不了,因为无法提取没有名称的东西,必须有个名字
虽然没找到原生的解决方案,但是咱们可以曲线救国
给字符串套个对象0.0
示例粗糙,结合之前的结论一起看就明白了~~~希望大家顺利顺利