UE C++ json 使用

Json String to Json Object


	FString jsonstr="{'id':'xx','arr':[{'no':0}]}";
	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(jsonstr);
	TSharedPtr<FJsonObject> rRoot;
	if (FJsonSerializer::Deserialize(JsonReader, rRoot)) {
    
    
		TArray<TSharedPtr<FJsonValue>> arr = rRoot->GetArrayField("arr");
		for (auto i:arr)
		{
    
    
			TSharedPtr<FJsonObject> iObj = i->AsObject();
			int32 no = iObj->GetNumberField("no");
		}
	}

JsonArr add Item


	TSharedPtr<FJsonObject> jsonObject = MakeShareable(new FJsonObject);
	
	TArray<TSharedPtr<FJsonValue>> jsondataArr;
		TSharedPtr<FJsonObject> jsonData = MakeShareable(new FJsonObject);
		jsonData->SetStringField(TEXT("name"), TEXT("xxx"));
	jsondataArr.Add(MakeShareable(new FJsonValueObject(jsonData)));
	
	jsonObject->SetArrayField(TEXT("arr"), jsondataArr);

UStruct to Json String


	USTRUCT()
	struct FEntityInfoItemStruct
	{
    
    
		GENERATED_USTRUCT_BODY()
		FEntityInfoItemStruct() {
    
    };
		FEntityInfoItemStruct(FString _id, FString _type, float _lat, float _lng) :EntityInfoItemId(_id), EntityInfoItemType(_type), EntityInfoItemLat(_lat), EntityInfoItemLng(_lng) {
    
    };
		UPROPERTY()
			FString EntityInfoItemId;
		UPROPERTY()
			FString EntityInfoItemType;
		UPROPERTY()
			float EntityInfoItemLat;
		UPROPERTY()
			float EntityInfoItemLng;
	};

	USTRUCT()
	struct FEntityInfoStruct
	{
    
    
		GENERATED_USTRUCT_BODY()
		UPROPERTY()
		FString action;
		UPROPERTY()
		TArray<FEntityInfoItemStruct> data;

		FString ToString()
		{
    
    
			FString OutStr;
			FJsonObjectConverter::UStructToJsonObjectString(*this, OutStr, 0, 0);
			return OutStr;
		}
	};
	
	FString converstr_ustruct2jsonstr;
	FEntityInfoStruct tempEntityInfo;
	tempEntityInfo.action = "type";
	for (uint8 i=0;i<10;i++)
	{
    
    
		FEntityInfoItemStruct tempEntityInfoItem("id_"+i, "type_"+1, 0.0, 0.0);
		tempEntityInfo.data.Emplace(tempEntityInfoItem);
	}

	FJsonObjectConverter::UStructToJsonObjectString(tempEntityInfo, converstr_ustruct2jsonstr, 0, 0);
	//converstr_ustruct2jsonstr = tempEntityInfo.ToString();

Json String to UStruct


	USTRUCT()
	struct FUserStruct
	{
    
    
		GENERATED_USTRUCT_BODY()
			UPROPERTY()
			FString id;
			UPROPERTY()
			FString name;
			UPROPERTY()
			int32 age;
	};

	FUserStruct userStruct;
	FString converstr_json2ustruct;
	FString resstr = "{'id':'001','name':'Jack','age':10 }";
	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(resstr);
	TSharedPtr<FJsonObject> rRoot;
	if (FJsonSerializer::Deserialize(JsonReader, rRoot)) {
    
    
		FJsonObjectConverter::JsonObjectToUStruct(rRoot.ToSharedRef(), &userStruct);
	}

Json Obj to UStruct


	USTRUCT(BlueprintType)
struct FFlightData {
    
    
	GENERATED_USTRUCT_BODY()
	UPROPERTY(BlueprintReadWrite)
		FString  	height;
	UPROPERTY(BlueprintReadWrite)
		FString  	latitude;
	UPROPERTY(BlueprintReadWrite)
		FString  	longitude;

};
USTRUCT(BlueprintType)
struct FFlightDatas {
    
    
	GENERATED_USTRUCT_BODY()
		UPROPERTY(BlueprintReadWrite)
	TArray<FFlightData> FlightDatas;
}; 

	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(jsondata);
	TSharedPtr<FJsonObject> rRoot;
	if (FJsonSerializer::Deserialize(JsonReader, rRoot)) {
    
    
		FFlightDatas FlightDatas;
		FJsonObjectConverter::JsonObjectToUStruct(rRoot.ToSharedRef(), FFlightDatas::StaticStruct(), &FlightDatas, 0, 0);
	}

猜你喜欢

转载自blog.csdn.net/tianxiaojie_blog/article/details/127520187