You need to iterate on value:

 // extract json content from the request:
 set dynRequestJsonPayload = {}.%FromJSON(%request.Content)
 #dim JsonIterator As %Iterator.AbstractIterator
 set JsonIterator = dynRequestJsonPayload.%GetIterator()
 
 // iterate on json structure:
 if dynRequestJsonPayload '= "" {
    while JsonIterator.%GetNext(.key, .value, .NodeType) { 
      if NodeType = "string" {
        do GlobalTrace("NodeType: " _ NodeType _ "; key: " _ key _ "; value: " _ value)
      } elseif NodeType = "array" {
         // i want to iterate on this array...
         // the following line throws the exeception "ERREUR #5002: Erreur ObjectScript: <INVALID OREF>traitementUFI+34^common.REST.1"
         set JsonIteratorSecondary = value.%GetIterator()
      } else {
	      // Do something
      }

    }
}

Try this in /bin/iris2/mgr/irisodbc.ini:

[ODBC Data Sources]
HL7Interface2=HL7Interface2

[HL7Interface2]
Driver = /usr/lib64/psqlodbcw.so
Setup=/usr/local/lib/libodbcpsqlS.so
Description = HL7 Interface DB
Servername = localhost
Port = 5432
Protocol = 7.4-1
UserName = postgres
Password =  <real pw here>
Database = hl7interface
ReadOnly = no

And restart iris, after that would it connect?

Great article!

I would advice to reuse the client, it will save you a lot of time.

In REST:

ClassMethod init()
{
    If '$data(%JDBCGateway) {
            Set %JDBCGateway("client") = ##class(%SYS.Python).Import("boto3").client("dynamodb")
            Set %JDBCGateway("table") = ..getTable("us-east-2", "mytable")
  }
}

ClassMethod getTable(region, tablename) As %SYS.Python [ Language = python ]
{
    import json
    import boto3
    dynamo = boto3.resource("dynamodb", region_name=region)
    return dynamo.Table(tablename)
}

ClassMethod writepy(table, pk, sk, msg) [ Language = python ]
{
    message_record = {
        "PK": pk,
        "SK": sk,
        "msg": msg
    }
    table.put_item(Item=message_record)
}

And call writepy, passing %JDBCGateway("table")  (or %JDBCGateway("client")).

In interoperability Business Hosts it can look like this:

Class App.BS Extends Ens.BusinessService
{

Parameter ADAPTER = "Ens.InboundAdapter";
Property Adapter As Ens.InboundAdapter;
Property Table As %SYS.Python;
Method OnInit() As %Status
{
    Set ..Table = ##class(App.REST).getTable("region", "table")
    Quit $$$OK
}

}

Also when you're using resource Table instead of client you can use normal JSON and not DynamoDB JSON which makes code more readable and you can also use Dynamic Objects to serialize to json / in python parse it from json to dict and call update.