【发布时间】:2015-08-01 06:36:19
【问题描述】:
我有一个从服务器获取的 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
标签: c++ json unreal-engine4