r/learnpython • • 3h ago

requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

import requests


# Add ?format=j1 to get a proper JSON response
url = "https://wttr.in"
response = requests.get(url)
data = response.json()


# This structure matches the j1 JSON format returned by wttr.in
current_temp = data['current_condition'][0]['temp_C']
print(
f
"Current temperature: {current_temp}°C")

I keep getting this exact SAME error whenever I work with public API's. I save the new codes in the files.
1 Upvotes

5 comments sorted by

11

u/nick_at_dolt 3h ago

Your code has a comment that says

# Add ?format=j1 to get a proper JSON responseAdd ?format=j1 to get a proper JSON response

Did you add ?format=j1 to the URL?

5

u/TabAtkins 3h ago

Print the actual value you received. You will find that it is, in fact, not JSON, but rather HTML, because you ignored the comment in your own code telling you how to correctly fetch JSON from that website.

1

u/favorite_stuff 3h ago

Those comments do a pretty good job of explaining, tbh.

You are not getting json from this API unless you ask for it. Once you do, it should follow that structure.

But hey, slow down and explore. Take what you're getting and print it. See what it's like. Or read the documentation for wttr.in and see what it says.

1

u/AlexMTBDude 1h ago

Print the response so that you know what goes wrong:

response = requests.get(url)
print(response)  # Add this line

1

u/atarivcs 1h ago

The response wasn't JSON, it was something else. So you can't call .json() on it.