• 虚幻引擎:UEC++如何对JSON文件进行读写?


    读取磁盘中的JSON文件 

    1. //解析JSON文件
    2. //如何读取磁盘文件
    3. FString JsonStr;
    4. if(FFileHelper::LoadFileToString(JsonStr,TEXT("D:\\Unreal Projects\\UECPP\\Poniter\\Content\\Data\\1.json")))
    5. {
    6. //通过解析工厂创建解析阅读器
    7. TSharedRef> JsonReade= TJsonReaderFactory<>::Create(JsonStr);
    8. //创建用于接收的UE的Json对象
    9. TSharedPtr JsonObject;
    10. //通过序列化工具进行反序列化,序列化一般指,将内存数据结构转换为其他数据结构
    11. if(FJsonSerializer::Deserialize(JsonReade,JsonObject))
    12. {
    13. //以下是对文件数据的处理
    14. TArray> JsonObjects = JsonObject->GetArrayField(TEXT("person"));
    15. TSharedPtr teacher = JsonObjects[0]->AsObject();
    16. TArray> teachers = teacher->GetArrayField(TEXT("teachers"));
    17. TSharedPtr teacherobj = teachers[0]->AsObject();
    18. TSharedPtr zhang = teacherobj->GetObjectField(TEXT("zhang"));
    19. TArray> Zhangs = zhang->GetArrayField(TEXT("hobby"));
    20. for (auto item:Zhangs)
    21. {
    22. UE_LOG(LogTemp, Log, TEXT("ok%s"),*item->AsString())
    23. }
    24. }
    25. }

     对磁盘中的JSON文件数据进行修改

    序列化JSON对象(将JSON对象转为字符串)

    注:序列化一般指,将内存中的数据结构转为其他数据结构

    1. //序列化JSON
    2. TSharedPtr ptr(new FJsonObject);
    3. ptr->SetStringField(TEXT("name"),TEXT("张三"));
    4. ptr->SetNumberField(TEXT("age"),12);
    5. ptr->SetBoolField(TEXT("Student"),true);
    6. //构建书写器
    7. FString str;
    8. TSharedRef> JsonWrite = TJsonWriterFactory<>::Create(&str);
    9. if(FJsonSerializer::Serialize(ptr.ToSharedRef(),JsonWrite))
    10. {
    11. UE_LOG(LogTemp, Log, TEXT("ok%s"),*str)
    12. }

    序列化JSON数组(将JSON数组转为字符串)

     

    1. TArray> Prr;
    2. Prr.Add(MakeShareable(new FJsonValueString(TEXT("文本"))));
    3. Prr.Add(MakeShareable(new FJsonValueBoolean(true)));
    4. TArray> ptr;
    5. ptr.Add(MakeShareable(new FJsonValueString(TEXT("哈哈"))));
    6. Prr.Add(MakeShareable(new FJsonValueArray(ptr)));
    7. TSharedPtrprtobj(new FJsonObject);
    8. prtobj->SetNumberField(TEXT("age"),12);
    9. Prr.Add(MakeShareable(new FJsonValueObject(prtobj)));
    10. //构建书写器
    11. FString str;
    12. TSharedRef> write = TJsonWriterFactory<>::Create(&str);
    13. if(FJsonSerializer::Serialize(Prr,write))
    14. {
    15. UE_LOG(LogTemp, Log, TEXT("%s"),*str)
    16. }

    将JSON数据存储至文件中

     

    1. //这里以将场景中的actor名字保存在一个文件中为例
    2. //创建JSON类型的数组
    3. TArray> Array;
    4. //创建存储Actor的数组
    5. TArrayActorArray;
    6. //获取所有actor
    7. UGameplayStatics::GetAllActorsOfClass(this,AActor::StaticClass(),ActorArray);
    8. //遍历将actor的名称加至JSON数组中
    9. for(auto item:ActorArray)
    10. {
    11. TSharedPtrobj(new FJsonObject);
    12. obj->SetStringField(TEXT("name"),item->GetName());
    13. Array.Add(MakeShareable(new FJsonValueObject(obj)));
    14. }
    15. //创建用于接收的字符串
    16. FString str;
    17. //构建书写器
    18. TSharedRef>val = TJsonWriterFactory<>::Create(&str);
    19. //进行序列化
    20. if(FJsonSerializer::Serialize(Array,val))
    21. {
    22. //保存至文件中
    23. FFileHelper::SaveStringToFile(str,TEXT("D:\\UnrealProjects\\UECPP\\Poniter\\Content\\Data\\2.json"));
    24. }

     

  • 相关阅读:
    c++多态
    用UNIGUI实现的网络共享打印(云打印)效果
    Rust6.2 An I/O Project: Building a Command Line Program (mini_grep)
    Java异常处理
    GoLang反射
    【CORS 报错】跨域请求问题:CORS 多种环境下的解决方案
    Agent开发的一小步,大模型应用的一大步
    小优化记录
    利用jemalloc优化mysql
    以太坊虚拟机
  • 原文地址:https://blog.csdn.net/chai_tian/article/details/134426700