Your description doesn't match your post title. What is your actual question?
Both Powershell and JSON don't particularly care about the structure of your data. In PS you can have an array of various objects (it sees everything as object anyway) and JSON allows for optional fields so the missing fields in the first value won't impact the structure.
# Using a hash object here for convenience
$item1 = @{ basePrice = 100; category = "some category"; packageWeightUnit = "g"; productType = "Some type" }
$item2 = @{ basePrice = 100; category = "some category"; packageWeightUnit = "g"; productType = "Some type"; attributes = @{ colour = @("blue", "red"); hight = @(100) } }
# Assuming you have more items than this...
$list = New-Object System.Collections.ArrayList
$list += $item1
$list += $item2
ConvertTo-Json $list -depth 4
To go the other way, given the previous JSON
$readItems = ConvertFrom-Json $json