Look Up Data in a CSV File

This DataWeave example uses filter with map to look up data in a CSV file and return a country code for each calling code found within an input array of phone numbers. Before you begin, note that 2.x versions of DataWeave are used by Mule 4 apps. For DataWeave in Mule 3 apps, refer to DataWeave version 1.2 examples. For other DataWeave versions, you can use the version selector in the DataWeave table of contents.

The following JSON payload provides an array of phone numbers to the DataWeave script.

[
   "54-112724555",
   "1-6298765432"
]

The value of the Mule variable country_codes is a CSV file that maps calling codes to country codes.

CALLING_CODE,COUNTRY_CODE
1,US
7,RU
54,AR
20,EG
32,BE
33,FR
505,NI
506,CR
1876,JM
1905,CA
1939,PR
262262,RE
262269,YT
.,.
.,.

The following DataWeave script reads each phone number in the payload and uses the filter function to search for the calling code within the Mule variable country_code that matches the calling code in the phone number. Then the map function gets the country code that corresponds to the calling code and returns the results to an array of JSON objects.

DataWeave Script:
%dw 2.0
output application/json

fun lookupCountryCode(phoneNumber: String): String = do {
    var callingCode = (phoneNumber splitBy("-"))[0]
    ---
    (vars.country_code filter ((item, index) -> item.CALLING_CODE == callingCode) map ((item, index) -> item.COUNTRY_CODE))[0]
}
---
payload map ((item, index) -> { phone: item, countryCode: lookupCountryCode(item)})
Sample Output (JSON):
[
  {
    "phone": "54-112724555",
    "countryCode": "AR"
  },
  {
    "phone": "1-6298765432",
    "countryCode": "US"
  }
]

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub