Json格式示例:

{
    "function": "Macro",
    "params": {
        "behaviors": [{
                "behavior": {
                    "function": "1566",
                    "params": {
                        "duration": 6.37,
                        "filePath": "http://17/api/15"
                    }

                },
                "start_time": 0
            },
            {
                "behavior": {
                    "function": "416546",
                    "params": {
                        "duration": 6.37,
                        "filePath": "http://175/915"
                    }
                },
                "start_time": 7.0
            }
        ]
    }
}

 

使用内置的json模块之前,在项目的Build.cs文件中,包含一下Json,JsonUtilities模块。

解析Json的函数

void ParseJsonObject(const FString messageStr)
{
    TSharedPtr<FJsonObject>jsonObject;        //FJsonObject类型
	TSharedRef<TJsonReader<TCHAR>>jsonReader=TJsonReaderFactory<TCHAR>::Create(messageStr);//类型转换
	bool isSe = FJsonSerializer::Deserialize(jsonReader, jsonObject);        //序列化,返回FJsonObject类型数据
	if (isSe)    //判断一下是否转换成功
	{
		FString func = jsonObject->GetStringField("function");		//function字符串参数
		FString content = jsonObject->GetStringField("content");	//content字符串参数
		TSharedPtr<FJsonObject> paramsObject=jsonObject->GetObjectField("params");		//params参数FJsonObject类型
        TArray<TSharedPtr<FJsonValue>> behaviorsArray = paramsObject->GetArrayField("behaviors");		//params下的behaviors数组参数

        for(int i=0;i<behaviorsArray.Num();i++)        //遍历数组
    	{
		    
            FString timeStr=behaviorsArray[i]->AsObject()->GetStringField("start_time");		//behaviors数组下的behavior的开始时间
		    float startTime=FCString::Atof(*timeStr);		//开始时间float类型
		    TSharedPtr<FJsonObject> behaviorObj=behaviorsArray[i]->AsObject()->GetObjectField("behavior");	//behaviors数组下的behavior参数	
		    FString beFuncStr=behaviorObj->GetStringField("function");			//behavior下的function字符串参数
		    TSharedPtr<FJsonObject> beParam=behaviorObj->GetObjectField("params");		//behavior下的params参数
		    FString filePathStr=beParam->GetStringField("filePath");		//params参数下的filePath字符串参数
	

	    }
		
    }
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐