- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下是我要解析的 JSON 文件:-
{
"GameSetting":{
"Num_Levels":"3",
"Env_Type":"Indoor"
},
"Indoor":[
{
"Name":"simple room",
"objects":[
{"objectName":"chair"},
{"objectName":"tables"},
{"objectName":"boxes"},
{"objectName":"barrels"}
],
"number_of_objects":"10"
},
{
"Name":"multistory",
"objects":[
{ "objectName":"chair"},
{"objectName":"tables"},
{"objectName":"railings"},
{"objectName":"staircase"}
],
"number_of_objects":"25"
},
{
"Name":"passageway",
"objects":[
{"objectName":"forklift"},
{"objectName":"tables"},
{"objectName":"rooms"},
{"objectName":"doors"}
],
"number_of_objects":"32"
}
],
"Outdoor":[
{
"Name":"Downtown",
"objects":[
{"objectName":"Tall buildings"},
{"objectName":"medium buildings"},
{"objectName":"cars"},
{"objectName":"people"}
],
"number_of_objects":"10",
"Weather":"sunny",
"Wind":"Yes"
},
{
"Name":"Neighborhood",
"objects":[
{"objectName":"houses"},
{"objectName":"complexes"},
{"objectName":"community area"},
{"objectName":"park"},
{"objectName":"cars"},
{"objectName":"people"}
],
"number_of_objects":"25",
"Weather":"rainy",
"Wind":"Yes"
},
{
"Name":"Forest",
"objects":[
{"objectName":"trees"},
{"objectName":"lake"},
{"objectName":"mountains"}
],
"number_of_objects":"32",
"Weather":"rainy",
"Wind":"No"
}
]
}
我正在使用这个问题的答案中指定的方法:C++ Nested JSON in Unreal Engine 4
我能够成功访问 GameSetting 的两个属性,Indoor 的名称和 number_of_objects 属性以及 Outdoor 的名称、number_of_objects、风和天气属性。我遇到的唯一问题是室内和室外的对象数组。
下面是我的头文件:
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "JsonParser.generated.h"
USTRUCT()
struct FGameSetting
{
GENERATED_USTRUCT_BODY()
UPROPERTY()
FString Num_Levels;
UPROPERTY()
FString Env_Type;
};
USTRUCT()
struct FArrayBasic
{
GENERATED_USTRUCT_BODY()
UPROPERTY()
FString objectName;
};
USTRUCT()
struct FIndoorBasic
{
GENERATED_USTRUCT_BODY()
UPROPERTY()
FString Name;
TArray <FArrayBasic> objects;
UPROPERTY()
FString number_of_objects;
};
USTRUCT()
struct FOutDoorBasic
{
GENERATED_USTRUCT_BODY()
UPROPERTY()
FString Name;
TArray <FArrayBasic> objects;
UPROPERTY()
FString number_of_objects;
UPROPERTY()
FString Weather;
UPROPERTY()
FString Wind;
};
USTRUCT()
struct FMain
{
GENERATED_USTRUCT_BODY()
UPROPERTY()
FGameSetting GameSetting;
UPROPERTY()
TArray<FIndoorBasic>Indoor;
UPROPERTY()
TArray<FOutDoorBasic>Outdoor;
};
UCLASS()
class JSONPARSING_API AJsonParser : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AJsonParser();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
};
和 .cpp 文件:
// Fill out your copyright notice in the Description page of Project Settings.
#include "JsonParser.h"
#include "JsonUtilities.h"
// Sets default values
AJsonParser::AJsonParser()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void AJsonParser::BeginPlay()
{
Super::BeginPlay();
const FString JsonFilePath = FPaths::ProjectContentDir() + "/JsonFiles/randomgenerated.json";
FString JsonString; //Json converted to FString
FFileHelper::LoadFileToString(JsonString,*JsonFilePath);
//Displaying the json in a string format inside the output log
GLog->Log("Json String:");
GLog->Log(JsonString);
//Create a json object to store the information from the json string
//The json reader is used to deserialize the json object later on
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());
TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(JsonString);
if (FJsonSerializer::Deserialize(JsonReader, JsonObject) && JsonObject.IsValid())
{
FMain Main;
FJsonObjectConverter::JsonObjectStringToUStruct<FMain>(JsonString, &Main, 0, 0);
FString Data = Main.Outdoor[0].Wind;
//FArrayBasic Data1 = Main.Indoor[0].objects.GetData[0];
GLog->Log("sfdjngejbfwjqwnoesfjkesngkwbegjkwefbnjk");
GLog->Log(Data);
//for (int32 index = 0; index<Data.Num(); index++)
//{
// GLog->Log("name:" + Data[index]->AsString());
//}
//The person "object" that is retrieved from the given json file
TSharedPtr<FJsonObject> GameSetting = JsonObject->GetObjectField("GameSetting");
//Getting various properties
GLog->Log("ENV_TYPE:" + GameSetting->GetStringField("ENV_TYPE"));
GLog->Log("NUM_LEVELS:" + FString::FromInt(GameSetting->GetIntegerField("NUM_LEVELS")));
//Retrieving an array property and printing each field
/*TArray<TSharedPtr<FJsonValue>> objArray=PersonObject->GetArrayField("family");
GLog->Log("printing family names...");
for(int32 index=0;index<objArray.Num();index++)
{
GLog->Log("name:"+objArray[index]->AsString());
}*/
}
else
{
GLog->Log("couldn't deserialize");
}
}
// Called every frame
void AJsonParser::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
如果有人可以使用相同的方法帮助我解析 JSON 文件中数组中的数组,那将非常有帮助。提前致谢。
最佳答案
想通了。
我只需要让TArray < FArrayBasic > objects 一个 UPROPERTY() 让它反射(reflect)在这个系统中并获取复制到它的值,这样我们就可以像我试图访问它的那样访问它.
关于c++ - 如何使用 Unreal 在 C++ 中解析 JSON 文件中的 Array of Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52516942/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!