Data Fetcher Help Center
🚀 Try for free📮 Support
  • 👋Welcome
  • Create Requests
    • Create a request
    • Use table values in requests
    • Use variables in requests
    • Response field mapping
    • Schedule a request
    • Add a request trigger
    • Troubleshoot errors
    • Run request using webhook URL
    • Pre-built integrations
  • Custom Requests
    • Create a custom request
    • Set request method
    • Set request parameters
    • Request authorization
    • Set request headers
    • Add request body
    • Connect to a preset OAuth API
    • Create a custom OAuth connection
  • Advanced settings
    • Write modes
    • Update based on field(s)
    • Pagination
    • Response data transformations
    • Response JMESPath
    • Add fixed value to output
    • No output mode
    • Rate limit
    • Max response records
    • Run request from button field
    • Denormalize response
    • XML array handling
    • Fixed IP Address
  • Organise Requests
    • Run history
    • Duplicate a request
    • Delete a request
    • Add request description
    • Import request from cURL command
    • Export requests as JSON file
    • Import requests from JSON file
  • Create Sequences
    • Create a sequence
    • Schedule a sequence
    • Run sequence from button field
    • Run sequence using webhook URL
  • Account
    • Upgrade workspace
    • Authorize Data Fetcher and Airtable
    • Add user to workspace
    • Roles and permissions
    • View monthly usage
    • Update personal details
    • Update payment card
    • Update billing information
    • View invoices
    • Switch workspace
  • Get a Google Maps API Key
Powered by GitBook
On this page
  1. Advanced settings

Denormalize response

Some API endpoints will return JSON data where each value is nested under a different key, and these keys can change between responses. This can cause problems when mapping response fields to an output table.

For example, calling the exchangerate.host API between 2020-01-01 and 2020-01-03 (https://api.exchangerate.host/timeseries?start_date=2020-01-01&end_date=2020-01-07&symbols=USD) gives us this JSON:

{
  "motd": {
    "msg": "If you or your company use this project or like what we doing, please consider backing us so we can continue maintaining and evolving this project.",
    "url": "https://exchangerate.host/#/donate"
  },
  "success": true,
  "timeseries": true,
  "base": "EUR",
  "start_date": "2020-01-01",
  "end_date": "2020-01-07",
  "rates": {
    "2020-01-01": {
      "USD": 1.1221,
      "GBP": 0.8462
    },
    "2020-01-02": {
      "USD": 1.1221,
      "GBP": 0.8466
    },
    "2020-01-03": {
      "USD": 1.1171,
      "GBP": 0.8495
    }
  }
}

Furthermore, if we were to change the start_date and end_date parameters on the request to 2021-01-01 and 2021-01-03, we would get totally new keys under rates in the JSON, which would not be mapped to any of our fields.

{
   "motd":{
      "msg":"If you or your company use this project or like what we doing, please consider backing us so we can continue maintaining and evolving this project.",
      "url":"https://exchangerate.host/#/donate"
   },
   "success":true,
   "timeseries":true,
   "base":"EUR",
   "start_date":"2021-01-01",
   "end_date":"2021-01-03",
   "rates":{
      "2021-01-01":{
         "USD":1.217582
      },
      "2021-01-02":{
         "USD":1.2135
      },
      "2021-01-03":{
         "USD":1.223409
      }
   }
}

What we really want is just two fields, a Date field and a Rates USD field, and the different dates to be added as different records with these two fields.

We can do this by denormalizing the response. When we denormalize the response and run the request, the response will be transformed into:

{
  "motd": {
    "msg": "If you or your company use this project or like what we doing, please consider backing us so we can continue maintaining and evolving this project.",
    "url": "https://exchangerate.host/#/donate"
  },
  "success": true,
  "timeseries": true,
  "base": "EUR",
  "start_date": "2020-01-01",
  "end_date": "2020-01-07",
  "rates": 
    [
      {
        "Date": "2020-01-01",
        "USD": 1.1221,
        "GBP": 0.8462
      },
      {
        "Date": "2020-01-02",
        "USD": 1.1221,
        "GBP": 0.8466
      },
      {
        "Date": "2020-01-03",
        "USD": 1.1171,
        "GBP": 0.8495
      }
    ]
  }
}

You can see that all the dates are now under a rates.Date field and all the USD exchange rates are now under a rates.USD field. So now we have just two constant fields that we can map to two fields in our output table.

Denormalize the Response

  • Enter a Denormalize Field Name for the field that will be added to each record. e.g for the above JSON, we could enter 'Date'.


Last updated 6 months ago

When we try to map this to our base using the , we will get a different field name for each date key under rates. e.g. rates.2020-01-01.USD and rates.2020-01-02.USD would be different fields.

On the create request screen, click to open the advanced settings.

Under Denormalise Path, enter the to where you want to denormalize the data. e.g. for the above JSON, it is $.rates.

response field mapping
JSONPath