How do I perform basic Json operations: loop properties/array, get list of property names, build json object from scratch and ToString everything :| thanks!

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
}