UE4 的json读写方式
转自:http://blog.csdn.net/cartzhang/article/details/41009343
JSON 的解析有很多开源库。UE4的JSON使用在代码的Public->Serialization中。
头文件包含:Json.h
Json的读写创建是static形成的单例模式,有JsonWrite或JsonReader的Factory来创建(Create)出来。
以读方式为例子:
读的代码:
float _score = MyPlayerState->GetScore();
FString _player_name = MyPlayerState->GetName();
int _kills = MyPlayerState->GetKills();
int _deaths = MyPlayerState->GetDeaths(); FString JsonStr;
TSharedRef< TJsonWriter<TCHAR, TCondensedJsonPrintPolicy<TCHAR> > > JsonWriter = TJsonWriterFactory<TCHAR, TCondensedJsonPrintPolicy<TCHAR> >::Create(&JsonStr);
JsonWriter->WriteObjectStart();
JsonWriter->WriteValue(TEXT("name"), _player_name);
JsonWriter->WriteValue(TEXT("score"), _score);
JsonWriter->WriteValue(TEXT("deaths"), _deaths);
JsonWriter->WriteValue(TEXT("kills"), _kills);
lt;span style="white-space:pre"> </span>JsonWriter->WriteObjectEnd();
// Close the writer and finalize the output such that JsonStr has what we want
JsonWriter->Close();
return JsonStr;
写的对象可以为Objcet或Array数组,value值。
一个读写过程中,Start和End要对应,因为Json格式的要求,要不我怎么知道哪里是一个对象或数组的结尾呢。这样就会造成混乱的。
UE4 的json读写方式
一、UE4的Json解析代码
有网友说UE4的解析有问题,解析出错。个人觉得应该是Json格式有问题。或解析的对象不正确,对象或数组用来对应的解析方式来解析的。
解析方式有两种:类名为:FJsonSerializer,头文件名称为JsonSerializer.h
template <class CharType>
static bool Deserialize( const TSharedRef< TJsonReader<CharType> >& Reader, TArray< TSharedPtr<FJsonValue> >& OutArray )
{
StackState State;
if ( !Deserialize( Reader, /*OUT*/State ) )
{
return false;
} if ( State.Object.IsValid() )
{
return false;
} OutArray = State.Array;
return true;
} template <class CharType>
static bool Deserialize( const TSharedRef< TJsonReader<CharType> >& Reader, TSharedPtr<FJsonObject>& OutObject )
{
StackState State;
if ( !Deserialize( Reader, /*OUT*/State ) )
{
return false;
} if ( !State.Object.IsValid() )
{
return false;
} OutObject = State.Object;
return true;
}
可以看出,第一个是针对数组的,第二个是针对Json对象的。请注意分别。
二、样例代码
void ATestPhysics1Character::JsonDeserialize()
{
FString JsonValue = "[{\"author\":\"4446545646544\"},{\"name\":\"jack\"}]"; FString JsonStr;
TArray<TSharedPtr<FJsonValue>> JsonParsed;
TSharedRef< TJsonReader<TCHAR> > JsonReader = TJsonReaderFactory<TCHAR>::Create(JsonValue); bool BFlag = FJsonSerializer::Deserialize(JsonReader, JsonParsed);
if (BFlag)
{
int ArrayNumber = JsonParsed.Num();
if (ArrayNumber == )
{
FString FStringAuthor = JsonParsed[]->AsObject()->GetStringField("author");
if (GEngine)
{
FString TmpString = "author :" + FStringAuthor;
GEngine->AddOnScreenDebugMessage(-, .f, FColor::Red, TmpString);
}
FString FStringName = JsonParsed[]->AsObject()->GetStringField("name");
if (GEngine)
{
FString TmpString = "name :" + FStringName;
GEngine->AddOnScreenDebugMessage(-, .f, FColor::Red, TmpString);
}
}
}
}
UE4 的json读写方式的更多相关文章
- UE4的JSON读写方式<一>
声明:全部权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/41009343 UE4的Json的解析博客地址: http:// ...
- UE4的JSON读写方式<一>
声明:所有权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/41009343 UE4的Json的解析博客地址: http:// ...
- UE4的JSON读写方式<二>
声明:所有权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/43794409 Json的Writer博客地址: http:// ...
- python 文件读写方式
一.普通文件读写方式 1.读取文件信息: with open('/path/to/file', 'r') as f: content = f.read() 2.写入文件中: with open('/U ...
- 【Spring学习笔记-MVC-3】SpringMVC返回Json数据-方式1
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- Python中异常和JSON读写数据
异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在java中通过try ... catch ... finally来处理异常,在Python中通过try ... except .. ...
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- json 读写 swift
// // ViewController.swift // json读写 // // Created by mac on 15/7/14. // Copyright (c) 2015年 fangyuh ...
- Epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是:EAGAIN: 再试一次, ...
随机推荐
- C++中ceil、floor和round的区别
Math类中提供了三个与取整有关的方法:ceil,floor,round,这些方法的作用于它们的英文名称的含义相对应 1.ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3 ...
- 使用dos2unix批量转换文件
使用dos2unix批量转换文件 dos2unix是Linux下的一个用户转换格式的程序,由于windows上文件的结束符和linux上的不同,那么在windows上编写的文件或者是脚本在Linux上 ...
- tenserflow models包的安装
1.下载 models包 https://github.com/tensorflow/models 2.将models包拷贝到本机Python包的安装地址即可,本机Python包的安装地址的查看方式可 ...
- $state和$rootScope.$on($stateChangeStart)
这两者的区别:请看博客:http://stackoverflow.com/questions/32680292/angularjs-state-and-rootscope-onstatechanges ...
- Java Spring-事务管理
2017-11-12 16:31:59 Spring的事务管理分为两种: 编程式的事务管理:手动编写代码 声明式的事务管理:只需要配置就可以 一.最初的环境搭建 public interface Ac ...
- Linux命令详解-help
help命令顾名思义就是显示帮助信息的,它是个Bash内建命令,也只是用来显示Bash内建命令的帮助信息的(Display helpful information about builtin co ...
- $'\r': command not found in Cygwin
这是因为windows下的回车符改为Unix下的回车符,用以下命令可以批量修改. dos2unix ./*
- PLSQL 触发器
触发器权限 数据库创建用户时想要在本用户下使用触发器,需要给用户触发器的权限 使用DBA用户执行 GRANT CREATE TRIGGER TO user_name; 如果想在当前用户下创建其他用户 ...
- epoll 模型
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Unit Test Generator 简介
从Visual Studio 2012开始,创建单元测试从右键菜单中消失了,这让开发者感觉很不习惯.其实创建单元测试并不是消失了,只是独立成一个扩展Unit Test Generator,单独安装这个 ...