我有一个从服务器获取的JSON对象,看起来像这样:
{
"state":"1",
"player1": {
"alias":"Player Name",
"ready":"0"
}
}
我可以获取JSON,将其解析为FJsonObject,并使用以下代码进行序列化以检索JSON对象的第一级中的任何数字或字符串:
TSharedPtr<FJsonObject> JsonParsed;
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(json);
if (FJsonSerializer::Deserialize(JsonReader, JsonParsed))
//Use JsonParsed
以下是用于读取字符串的代码:
FString AJSONContainer::getStringWithKey(FString key)
{
return storedJSON->GetStringField(key);
}
旁注:
AJSONContainer只是一个我用来从蓝图中调用这些函数的Actor类。
这很好,但是当我尝试从第二层读取内容时,事情就不顺利了。
我编写了以下代码以获取下一级:
TSharedPtr<FJsonObject> nested = storedJSON->GetObjectField(key);
但是获取nested
字段的所有调用都没有返回任何结果。
nested->GetStringField(anotherKey); //Nothing
因此,以上述JSON为例,这个:
TSharedPtr<FJsonObject> nested = storedJSON->GetObjectField("player1");
FString alias = nested->GetStringField("alias");
当我将alias
控制台输出时,它没有值。
我做错了什么吗?为什么第二级JSON不起作用?
GetField<EJson::Object>
而不是GetObjectField
可以轻松解决问题。它将为您获取一个JsonValue
,您可以使用FJsonValue::AsObject
方法将其转换为FJsonValue
。 - Santiago