UE4 中C++读取Json文件

2023-11-07

本篇文章介绍C++读取Json文件前我们先了解下Json格式,Json格式不同读取会有所区别(踩了一波坑)

Json文件有三种格式,这三种格式都是正确的。这边提供一个很有用的Json文件在线编辑平台的网址:在线编辑Json网站

Json文件的三种格式如图:

1.

{
    "Name": "张三",
    "Age": 18,
    "hobby": 
    [
        "画画",
        "游泳",
        "羽毛球"
    ],
    "星座": "狮子座",
}

2.

[1,"hello world",null]

3.

[
    {
        "count": 3,
        "xres_ver": "2.0"
    },
    {"Language": [
	    {
		    "Areakey": "china",
		    "ID": 1,
		    "LangName": "中文"
	    },
	    {
		    "Areakey": "taiwan",
		    "ID": 2,
		    "LangName": "中文繁体"
	    },
	    {
		    "Areakey": "en",
		    "ID": 3,
		    "LangName": "english"
	    }
    ]}
]

第一种格式的Json文件读取方式可参考如下代码:

FString filePath =  FPaths::ProjectContentDir() +TEXT("Test.json");
if (!FPaths::FileExists(filePath ))
{
    UE_LOG(LogTemp, Error, TEXT("File Path:%s ,File do not exist"),*filePath);
	return;
}
FString ContentStr;
if (!FFileHelper::LoadFileToString(ContentStr, *filePath ))
{
	UE_LOG(LogTemp, Error, TEXT("File Path:%s ,File Load failed"),*filePath);
	return;
}
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<TCHAR>::Create(ContentStr);
TSharedPtr<FJsonObject> rootObject;

bool bSuccess = FJsonSerializer::Deserialize(jsonReader, rootObject);
if (!bSuccess)
{
		UE_LOG(LogTemp, Error, TEXT("Parseing failed: [%s]!!"), *filePath);
		return;
}

FString Name;
if (rootObject->TryGetStringField(TEXT("LogicLevelGroup_cfg"), Name))
{
    UE_LOG(LogTemp, Error, TEXT("people Name: [%s]!!"), *Name)
}

第二、三种格式的Json文件读取方式可参考如下代码:

FString filePath =  FPaths::ProjectContentDir() +TEXT("Test.json");
if (!FPaths::FileExists(filePath ))
{
    UE_LOG(LogTemp, Error, TEXT("File Path:%s ,File do not exist"),*filePath);
	return;
}
FString ContentStr;
if (!FFileHelper::LoadFileToString(ContentStr, *FilePath))
{
	UE_LOG(LogTemp, Error, TEXT("File Path:%s ,File Load failed"),*filePath);
	return;
}
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<TCHAR>::Create(ContentStr);
TArray<TSharedPtr<FJsonValue>> OutArray;

if (FJsonSerializer::Deserialize(Reader, OutArray))
{
	TSharedPtr<FJsonObject> JsonObject;
	JsonObject = OutArray[1]->AsObject();
	TArray<TSharedPtr<FJsonValue>> ConfigArray;
	LanguageArray = JsonObject->GetArrayField("Language");
	for (auto JsonValue : LanguageArray)
    {
    
        TSharedPtr<FJsonObject>itemObjet = item->AsObject();
		FString LangName = itemObjet->GetStringField(TEXT("LangName"))
        UE_LOG(LogTemp, Error, TEXT("Language name:%s"),*LangName);
    }
}

实际上两种解析的区别主要在于对Json文件中类似于字典以及数组 的两种数据结构的区别处理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE4 中C++读取Json文件 的相关文章

随机推荐

  • VC项目中文件类型说明

    APS 存放二进制资源的中间文件 VC把当前资源文件转换成二进制格式 并存放在APS文件中 以加快资源装载速度 资源辅助文件 BMP 位图资源文件 BSC 浏览信息文件 由浏览信息维护工具 BSCMAKE 从原始浏览信息文件 SBR 中生成
  • Elasticsearch与Clickhouse数据存储对比

    1 背景 京喜达技术部在社区团购场景下采用JDQ Flink Elasticsearch架构来打造实时数据报表 随着业务的发展Elasticsearch开始暴露出一些弊端 不适合大批量的数据查询 高频次分页导出导致宕机 存储成本较高 Ela
  • 从键盘输入一个字符,若为小写,则改为大写再输出

    include
  • React学习笔记

    一 基础 1 概念 React是用于构建用户界面的JavaScript库 只关注视 2 特点 声明式编程 React 使创建交互式 UI 当数据变动时 React 能高效更新并渲染合适的组件 组件化 构建管理自身状态的封装组件 然后对其组合
  • 华为技术支持面试

    一面 技术面 不同面试官 面试内容差别较大 班里有些同学随便聊4 5分钟就通过了 我 大概面了15分钟 首先是三分钟的中文自我介绍 然后针对简历提问 被问到毕业课题 而且问得比较详细 叫我画出整个方案的框架图 I2C LCD的时序图 项目工
  • Linux驱动

    HC SR04超声波模块 工作原理参考 超声波模块 star air的博客 CSDN博客 超声波模块 https blog csdn net qq 41262681 article details 95940707 使用超声波测距的操作步骤
  • java获取post数据_java通过HttpServletRequest获取post请求中的body内容的方法

    在java web应用中 我们如何获取post请求body中的内容 以及需要注意的问题 通常利用request获取参数可以直接通过req getParameter name 的方式获取url上面或者ajax data提交上来的参数 但是bo
  • centos7.9 安装使用kafka

    安装kafka之前需要安装java8 以上版本 yum install java 1 8 0 openjdk x86 64 yum install java 1 8 0 openjdk devel x86 64 安装kafka 软件下载地址
  • 64GU盘装机后变成32G,且电脑无法识别问题解决

    问题描述 借助64G的闪迪U盘给电脑装了系统后 直接拔出后 忘记点弹出了 然后这个电脑的此电脑中就找不到这个U盘 别的电脑可以 但是在电脑右下角可以看到 64G变成32G这个问题网上解决办法很多 我是下载了DiskGenius然后格式化就好
  • scribe日志收集

    https www xiaomastack com 2014 11 11 scribe nginx php 日志管理 4 用scribe收集nginx和php日志 By 小马 十一月 11 2014 Scribe 日志管理 Leave a
  • win7 和 linux双系统安装教程,win7和centos7双系统完美安装攻略

    笔记本 台式机配置都太差了 装Vbox VM Hyper v都不能顺畅运行 太卡 于是想到开启台式机Wind7 CentOS7双系统运行模式 几经周折整理出以下安装过程 准备工作 准备辅助工具 所用工具包整理好 https pan baid
  • Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题

    当装好python3导入ssl模块时报以下错误 ModuleNotFoundError No module named ssl import ssl if we can t import it let the error propagate
  • 【标准解读】Autosar 复杂驱动(CDD)开发--看这一篇就够了

    系列文章目录 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一 Introduction to CDD 二 CDD设计建议 CDD开发需要注意的事项 2 1 文档 2 2行为和接口描述 2
  • Netty线程模型

    说明 1 Netty抽象出两组线程池 BossGroup专门负责接收客户端的链接 WorkerGroup专门负责网络的读写 2 BossGroup和WorkerGroup类型都是NioEventLooGroup 3 NioEventLoog
  • (转)非常好的WebApi入门文章

    如何在VS中创建基于 NET的后端应用程序 该应用程序使用C 语言从Web API中提取 让我们开始吧 为服务器后端逻辑选择语言的问题是几乎每个开发人员最重要的问题之一 特别是对于初学者 目前已经有很多不同的语言 Java NET C VD
  • 嵌入式数据结构(栈)

    嵌入式自学笔记 1 2 后进先出 3 栈的应用 从A出发进是入栈 红色的出是出栈 4 创建栈的思路 zhan zhancreat int len zhan s if s zhan malloc sizeof zhan NULL printf
  • css选择class中的第一个怎么选?使用first-of-type?

    Dom结构 div span class hha 我是span span h1 class hha 我是h1 h1 h1 我是h1 h1 h1 class hha 我是h1 h1 h1 class hha 我是h1 h1 h1 我是h1 h
  • 如何限制同一客户端登录的用户数量以及禁止同一用户同时在不同客户端登录?

    在web应用系统中 出于安全性考虑 经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制 具体一点就是 1 在同一台电脑上一次只允许有一个用户登录系统 2 一个用户在同一时间只允许在一个客户端登录 我最近做的一个系统就遇
  • Linux基本命令(二) 文件处理命令

    文件处理命令 touch 命令名称 touch 命令所在路径 bin touch 执行权限 所有用户 语法 touch 文件名 功能描述 创建空文件 范例 touch chen list 文件处理命令 cat 命令名称 cat 命令所在路径
  • UE4 中C++读取Json文件

    本篇文章介绍C 读取Json文件前我们先了解下Json格式 Json格式不同读取会有所区别 踩了一波坑 Json文件有三种格式 这三种格式都是正确的 这边提供一个很有用的Json文件在线编辑平台的网址 在线编辑Json网站 Json文件的三