How to save part properies and load it?

Hi, I want to save player created parts. I wrote a script, but it doesn’t work and doesn’t give out errors. I don’t need to save models, I just want to create a part from the server with the color, material, and position, save it, and upload it. Can someone help?

Script -

local PartStore = game:GetService("DataStoreService"):GetDataStore("PartStore")

game.Players.PlayerAdded:Connect(function(Player)
	
	local Data = PartStore:GetAsync(Player.UserId)
	local NormalData = game:GetService("HttpService"):JSONDecode(Data)
	if NormalData then
		for k, v in pairs(NormalData) do
			local Part = Instance.new("Part")
			Part[k] = v
			Part.Parent = game.Workspace
		end
	end
end)

game.Players.PlayerRemoving:Connect(function(Player)
	
	if game.Workspace:FindFirstChild("PlayerBuildings") then
	local Tables = {}
		
		for _, v in pairs(game.Workspace.PlayerBuildings:GetChildren()) do
		local Save = game:GetService("HttpService"):JSONEncode(v)
		print(Save)
		table.insert(Tables, Save)
	end
		
		local Succes, Error = pcall(function()
				PartStore:SetAsync(Player.UserId, Tables)
			end)
		if Succes then
			print("good")
		else
			warn(Error)
		end
	end
end)

I solved the problem a bit, but now datastore for some reason multiplies every time I load my data, why??

local ThatsTestDataStoreAgain222 = game:GetService("DataStoreService"):GetDataStore("ThatsTestDataStoreAgain222")
local PlayerBuildings = game.Workspace:WaitForChild("PlayerBuildings")

game.Players.PlayerAdded:Connect(function(Player)
	
	pcall(function()
	local Data = ThatsTestDataStoreAgain222:GetAsync(Player.UserId)
	if Data then
		for _, v in pairs(Data) do
			print("Loading") -- it print x128 omg
				local Part = Instance.new("Part")
				Part.Name = Data[1]
				Part.BrickColor = BrickColor.new(Data[2])
				Part.Parent = PlayerBuildings
			end
		end
	end)
end)

local function Save(Player)
	if PlayerBuildings then
		local Tables = {}
		
		for _, v in pairs(PlayerBuildings:GetChildren()) do
			table.insert(Tables, v.Name)
			table.insert(Tables, tostring(v.BrickColor))
		end
		
		pcall(function()
			ThatsTestDataStoreAgain222:SetAsync(Player.UserId, Tables)
		end)
	end
end

game.Players.PlayerRemoving:Connect(function(Player)
	Save(Player)
end)

game:BindToClose(function()
	for _, v in pairs(game.Players:GetPlayers()) do
		Save(v)
	end
end)