Rename JSON Keys | MuleSoft Documentation
# Rename JSON Keys
This DataWeave example renames some keys in a JSON object, while retaining the names of all others in the output.
The example uses these functions:
  * `mapObject` to go through the `key:value` pairs in a JSON object.
  * `if` by itself to determine when to change the name of a key.
  * `if` with `and` to retain the name of all keys except the two with new names.
  * `as` to coerce the type of the keys into a String.


DataWeave Script:
```
%dw 2.0
output application/json
---
payload.flights map (flight) -> {
  (flight mapObject (value, key) -> {
    (emptySeats: value) if(key as String == 'availableSeats'),
    (airline: value) if(key as String == 'airlineName'),
    ((key):value) if(key as String !='availableSeats' and key as String != 'airlineName')
  })
}
```

Input JSON Payload:
```
{
 "flights":[
 {
 "availableSeats":45,
 "airlineName":"Ryan Air",
 "aircraftBrand":"Boeing",
 "aircraftType":"737",
 "departureDate":"12/14/2017",
 "origin":"BCN",
 "destination":"FCO"
 },
 {
 "availableSeats":15,
 "airlineName":"Ryan Air",
 "aircraftBrand":"Boeing",
 "aircraftType":"747",
 "departureDate":"08/03/2017",
 "origin":"FCO",
 "destination":"DFW"
 }]
}
```

Output JSON:
```
[
 {
  "emptySeats": 45,
  "airline": "Ryan Air",
  "aircraftBrand": "Boeing",
  "aircraftType": "737",
  "departureDate": "12/14/2017",
  "origin": "BCN",
  "destination": "FCO"
 },
 {
  "emptySeats": 15,
  "airline": "Ryan Air",
  "aircraftBrand": "Boeing",
  "aircraftType": "747",
  "departureDate": "08/03/2017",
  "origin": "FCO",
  "destination": "DFW"
 }
]
```

A more maintainable way to produce the same output uses DataWeave pattern matching.
The example uses the following functions and statements:
  * `mapObject` to go through the `key:value` pairs in a JSON object.
  * `match` on each key in the input.
  * `case` statements to change the name of matching keys in the input.
  * `else` statement to retain the name of keys that do not require a name change.


DataWeave Script:
```
%dw 2.0
output application/json
fun renameKey(key: Key) = key match {
  case "availableSeats" -> "emptySeats"
  case "airlineName" -> "airline"
  else -> (key)
}
---
payload.flights map (flight) ->
flight mapObject (value, key) -> {
  (renameKey(key)) : value
}
```

Input JSON Payload:
```
{
 "flights":[
 {
 "availableSeats":45,
 "airlineName":"Ryan Air",
 "aircraftBrand":"Boeing",
 "aircraftType":"737",
 "departureDate":"12/14/2017",
 "origin":"BCN",
 "destination":"FCO"
 },
 {
 "availableSeats":15,
 "airlineName":"Ryan Air",
 "aircraftBrand":"Boeing",
 "aircraftType":"747",
 "departureDate":"08/03/2017",
 "origin":"FCO",
 "destination":"DFW"
 }]
}
```

Output JSON:
```
[
 {
  "emptySeats": 45,
  "airline": "Ryan Air",
  "aircraftBrand": "Boeing",
  "aircraftType": "737",
  "departureDate": "12/14/2017",
  "origin": "BCN",
  "destination": "FCO"
 },
 {
  "emptySeats": 15,
  "airline": "Ryan Air",
  "aircraftBrand": "Boeing",
  "aircraftType": "747",
  "departureDate": "08/03/2017",
  "origin": "FCO",
  "destination": "DFW"
 }
]
```

## Related Examples
  * Output a Field When Present
  * Dynamically Map Based on a Definition
  * Pass Functions as Arguments


## See Also
  * DataWeave Selectors
  *