Had a quick look in the UE source (unfortunately a very old version, 4.1), and it seems this is very possibly what you’re looking for (I haven’t tested it though) - check out:
Source/Runtime/Core/Private/Internationalization/InternationalizationMetadataJsonSerializer.cpp (function JSonValueToLocMetaDataValue, in the 4th case statement). I’ve extracted it below:
// Create test Json Object
TSharedPtr<FJsonObject> jsonData = MakeShareable(new FJsonObject());
// Add some string values:
jsonData->AddStringValue(TEXT("testkey1"),TEXT("testval1"));
jsonData->AddStringValue(TEXT("testkey2"),TEXT("testval2"));
// Iterate over Json Values
for (auto currJsonValue = jsonData->Values.CreateConstIterator(); currJsonValue; ++currJsonValue)
{
// Get the key name
const FString Name = (*currJsonValue).Key;
// Get the value as a FJsonValue object
TSharedPtr< FJsonValue > Value = (*currJsonValue).Value;
// Do your stuff with crazy casting and other questionable rituals
}