Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Qlik Connect 2026! Turn data into bold moves, April 13 -15: Learn More!
cancel
Showing results for 
Search instead for 
Did you mean: 
PaSympa
Contributor II
Contributor II

[2025-05] tHTTPClient : how to extract @microsoft.graph.downloadUrl from JSON response

Hello Community,

In Talend 2025-05 I’m calling Microsoft Graph with tHTTPClient.
The request works and I get a JSON payload back, but I can’t figure out how to extract the download URL that sits under the special field name @microsoft.graph.downloadUrl.

Here is a (sanitized) fragment of the JSON I receive:

{
  "@microsoft.graph.downloadUrl": "https://...sharepoint.com/sites/.../download.aspx?...",
  "createdBy": { "user": { "email": "user@domain.com", "id": "...", "displayName": "User Name" } },
  "createdDateTime": "2025-10-10T11:32:14Z",
  "eTag": "\"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX},1\"",
  "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "name": "example.jpeg",
  "webUrl": "https://...sharepoint.com/sites/.../example.jpeg",
  "size": 6632
}

 

What I tried in tHTTPClient → Output key/value pairs (none worked):

  • .@microsoft.graph.downloadUrl

  • .[@microsoft.graph.downloadUrl]

  • {.response.@microsoft.graph.downloadUrl}

  • {.response.[@microsoft.graph.downloadUrl]}

And in the console I keep getting:

[WARN ] ... TckSelectorInterpreterImpl - The selector '.@microsoft.graph.downloadUrl' doesn't match the given record. Empty string is returned.

 

It looks like the selector engine used by tHTTPClient chokes on the @ and the dots in the property name, even if I quote or escape it.

My questions

  • Is there a selector syntax in tHTTPClient that allows addressing JSON properties whose names include special characters (like @ and .)?
    If yes, what is the exact form to read @microsoft.graph.downloadUrl?

  • Alternatively, can we switch the component to JSONPath style (e.g., $['@microsoft.graph.downloadUrl']) for the Output key/value selector?

  • If this is not supported by tHTTPClient, what’s the recommended built-in Talend way to grab that field directly after the call?

Current workaround

I can set Returned content = Body and then use a downstream tExtractJSONFields with JSONPath
$['@microsoft.graph.downloadUrl'] to get the value. This works, but I’d prefer to keep it inside tHTTPClient using Output key/value pairs if possible (lighter job and fewer components).

Has anyone hit this before and found a clean selector that works within tHTTPClient?

Thank you in advance for your help!

Screenshots attached for reference :

PaSympa_0-1760114327943.png

Labels (4)
1 Solution

Accepted Solutions
PaSympa
Contributor II
Contributor II
Author

Hello, 

After a lot of testing I finally managed to make it work!


When the tHTTPClient component automaticaly normalizes the JSON response, all property names containing special characters are automatically transformed:

  • @ is ignored (removed)
  • . (dot) is replaced by an underscore (_)

So, for example,

"@microsoft.graph.downloadUrl" → becomes "microsoft_graph_downloadUrl"

That means to extract this value correctly, you just have to reference it with the normalized path.

In my case, the working selector was:

{.response.microsoft_graph_downloadUrl}

No need for quotes, escaping, or additional normalization rules — just use the normalized name and it works perfectly!

 

⚠️ Important note about normalization with default values

If you try to normalize the JSON HTTP response using the "Normalize attributes" option to ensure that this field is always present, be careful:  

Talend performs the normalization (.replacement,@removal) after adding the declared fields.

That means if you define a path such as:

.value.*.microsoft_graph_downloadUrl

and provide a default value, Talend will create that field before the dots are replaced by underscores, effectively re-creating it for every object and overwriting the original values with the default everywhere.

 

In short:  

Don’t use a default value for these special keys. Let Talend normalize the response automatically, and handle missing fields later (e.g., in a tMap).

 

Hope this helps anyone facing the same issue 

View solution in original post

1 Reply
PaSympa
Contributor II
Contributor II
Author

Hello, 

After a lot of testing I finally managed to make it work!


When the tHTTPClient component automaticaly normalizes the JSON response, all property names containing special characters are automatically transformed:

  • @ is ignored (removed)
  • . (dot) is replaced by an underscore (_)

So, for example,

"@microsoft.graph.downloadUrl" → becomes "microsoft_graph_downloadUrl"

That means to extract this value correctly, you just have to reference it with the normalized path.

In my case, the working selector was:

{.response.microsoft_graph_downloadUrl}

No need for quotes, escaping, or additional normalization rules — just use the normalized name and it works perfectly!

 

⚠️ Important note about normalization with default values

If you try to normalize the JSON HTTP response using the "Normalize attributes" option to ensure that this field is always present, be careful:  

Talend performs the normalization (.replacement,@removal) after adding the declared fields.

That means if you define a path such as:

.value.*.microsoft_graph_downloadUrl

and provide a default value, Talend will create that field before the dots are replaced by underscores, effectively re-creating it for every object and overwriting the original values with the default everywhere.

 

In short:  

Don’t use a default value for these special keys. Let Talend normalize the response automatically, and handle missing fields later (e.g., in a tMap).

 

Hope this helps anyone facing the same issue