I’m using the API of an affiliate network (Sovrn), expecting to retrieve a product’s specification using the URL.
As per their documentation, I use:
url = 'URL-goes-here'
headers = {
"accept": "application/json",
"authorization": "VERY-HARD-TO-GUESS"
}
response = requests.get(url, headers=headers)
The code is working, the response I get is 200
, the header contains the magical content-type application/json
line
when I do
print(response.text)
I get
NULL({"merchantName":"Overstock","canonicalUrl":"URL goes here","title":"product name",...});
I tested for response type of response.text
, it’s <class 'str'>
as expected. But when I try to process the response as json:
product_details = json.load(response.text)
I get an error message:
requests.exceptions.JSONDecodeError: [Errno Expecting value]
I’m new to JSON, but I assume the error is due to the outer NULL that the (seemingly valid) data is wrapped in.
After spending a few hours searching for a solution, it seems that I must be missing something obvious, but not sure what.
Any pointers would be extremely helpful.
2
Answers
You can ignore
NULL(
at the beginning and);
at the end by using string slicing:Additionally, you should be using
json.loads()
as the content is a string.That’s clearly a bug in the API. Assuming it will be fixed after you complain, you could add a hack to your code