How to modify object parsed from a sample JSON body then use that object to append properly in JSON builder?

While trying to parse the sample JSON body and modify that object according to my preference, I’m having trouble appending it to the existing JSON body that it came from initially. The problem is that when I append it the previous object in array also changed according to the newest object that I modified.

I have tried multiple ways to append it to the existing body and trying to modify a copy of the object but ultimately results in the same problem. I think I’m missing something important and I’m quite new in JS/Groovy Script

Col fromCurr 
row 1 = EUR
row 2 = CAD
int rows = rateCurrencyList.getRowNumbers() /* not being used yet to iterate to all records */
def saveDiffRateSetJsonBody = '''[
    {
        "fromcurrency": "EUR",
        "invConvRate": "1.09",
        "convRate": "1",
        "sourceCode": "MANUAL",
        "tocurrency": "USD",
    }
]'''

def jsonData = (new JsonSlurper()).parseText(saveDiffRateSetJsonBody)
def newRate = jsonData[0]
                
for(int i = 0; i < 2 ; i++) {

    newRate.fromcurrency = rateCurrencyList.getValue("fromCurr", i + 1) /* COL NAME, ROW */
    newRate.toCurrency = "USD"
    newRate.invConvRate = 1.09
    newRate.convRate = 1
    newRate.sourceCode = "MANUAL"
    newRate.exchangeRateSetCd = "TDM_USD_RATE_SET"
    
    jsonData[i] = newRate
}

saveDiffRateSetJsonBody = (new JsonBuilder(jsonData)).toPrettyString()

println saveDiffRateSetJsonBody

Result is:

[
    {
        "fromcurrency": "CAD",
        "invConvRate": 1.09,
        "convRate": 1,
        "sourceCode": "MANUAL",
        "tocurrency": "USD",
    },
    {
        "fromcurrency": "CAD",
        "invConvRate": 1.09,
        "convRate": 1,
        "sourceCode": "MANUAL",
        "tocurrency": "USD",
    }
]

I’m expecting:

[
    {
        "fromcurrency": "EUR",
        "invConvRate": 1.09,
        "convRate": 1,
        "sourceCode": "MANUAL",
        "tocurrency": "USD",
    },
    {
        "fromcurrency": "CAD",
        "invConvRate": 1.09,
        "convRate": 1,
        "sourceCode": "MANUAL",
        "tocurrency": "USD",
    }
]

I can do this multiple more object and all the object parameters will be the same. I will add that I will be doing this to more complex Json body with multiple arrays, parameters and objects but I wanted to pick a specific array/object/parameter and modify it accordingly. So basically, I will have a source body for a default parameter and use that to create a new JSON body to use for the new request.