Hello,
I ve started such code, but I don’t know how to manage the second level of arrays
Can you help, plz to fill my code?
if (FJsonSerializer::Deserialize(JsonReader, JsonParsed))
	{
		UE_LOG(ShimLog, Warning, TEXT("JSON OK"));
		TArray <TSharedPtr<FJsonValue>> zonesJs =  JsonParsed->GetArrayField("Zones");
		for (int itZones = 0; itZones != zonesJs.Num(); itZones++) {
			/// zonesJs[itZones]-> ???? // how to retrieve id?
                        /// zonesJs[itZones]-> ???? // how to array of events?
		}
	}
{
  "zones" :[
    {
      "id" : 1,
      "events":[
        {
          "id" : 1,
          "name" : "petitpirate",
          "relatedmission" : 1,
          "possibility" : 80,
          "reproduceEvenMissionFinished" : false,
          "spawn" : {
            "ship" : "darkfighter",
            "position" : "5000,5000,5000",
            "nbship" : 1
          }
        }
      ]
    }
  ]
}
 
            
              
            
           
          
            
            
              Here my code, and it works.
FString projectDir = FPaths::GameDir();
	projectDir += "/Content/data/events.json";
	//
	if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*projectDir))
	{
		UE_LOG(ShimLog, Warning, TEXT("FILE NOT FOUND %s"), *projectDir);
		return;
	}
	FString FileData = "TEST";
	FFileHelper::LoadFileToString(FileData, *projectDir);
	TSharedPtr<FJsonObject> JsonParsed;
	TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(FileData);
	if (FJsonSerializer::Deserialize(JsonReader, JsonParsed))
	{
		TArray <TSharedPtr<FJsonValue>> zonesJs =  JsonParsed->GetArrayField("Zones");
		for (int itZones = 0; itZones != zonesJs.Num(); itZones++) {
			TSharedPtr<FJsonObject> temp = zonesJs[itZones]->AsObject();
			TArray <TSharedPtr<FJsonValue>> eventJs = temp->GetArrayField("events");
			for (int itEvents = 0; itEvents != eventJs.Num(); itEvents++) {
				TSharedPtr<FJsonObject> tempEventJs = eventJs[itEvents]->AsObject();
				FString nameEvents = tempEventJs->GetStringField("name");
	
			}
		}
	}
	else {
		UE_LOG(ShimLog, Warning, TEXT("JSON KO"));
	}
 
            
              
            
           
          
            
            
              It solved my problem, thank you very much!
             
            
              
            
           
          
            
              
                LucasNova  
              
                  
                    October 28, 2019,  8:08am
                   
                  4 
               
             
            
              Your case can be automize by using this - json2ue4.com . This tool generate ustructs, which understand nested structures, arrays and common types like FString, int32, bool and float. Also it can generate serialization from json string. And you can easy work with your data. Enjoy.
             
            
              
            
           
          
            
              
                nande  
              
                  
                    November 9, 2022,  7:24pm
                   
                  5 
               
             
            
              In UE5 (at least) there’s now JsonArrayToUStruct (Thanks so much Epic!)
So all you need now is this:
// leave the code above
TArray<UMyStruct> data;
bool success = FJsonSerializer::Deserialize(JsonReader, JsonParsed) &&  FJsonObjectConverter::JsonArrayToUStruct(JsonParsed->AsArray(), &data);
also on UE5 FPaths::GameDir is now  FPaths::ProjectContentDir() afaik.
             
            
              
            
           
          
            
              
                Shen_Yuju  
              
                  
                    January 5, 2024,  6:12am
                   
                  6 
               
             
            
              But “FJsonObject” don’t have method “AsArray()” 
             
            
              
            
           
          
            
              
                nande  
                
                  
                    January 9, 2024,  1:54am
                   
                  7 
               
             
            
              it’s not FJsonObject it’s FJsonValue
             
            
              1 Like