How would I parse a json api response with python? I currently have this:
import urllib.request import json url = 'https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty' def response(url): with urllib.request.urlopen(url) as response: return response.read() res = response(url) print(json.loads(res))
I'm getting this error: TypeError: the JSON object must be str, not 'bytes'
What is the pythonic way to deal with json apis?
Version 1: (do a pip install requests
before running the script)
import requests r = requests.get(url='https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty') print(r.json())
Version 2: (do a pip install wget
before running the script)
import wget fs = wget.download(url='https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty') with open(fs, 'r') as f: content = f.read() print(content)
you can use standard library python3:
import urllib.request import json url = 'http://www.reddit.com/r/all/top/.json' req = urllib.request.Request(url) ##parsing response r = urllib.request.urlopen(req).read() cont = json.loads(r.decode('utf-8')) counter = 0 ##parcing json for item in cont['data']['children']: counter += 1 print("Title:", item['data']['title'], "\nComments:", item['data']['num_comments']) print("----") ##print formated #print (json.dumps(cont, indent=4, sort_keys=True)) print("Number of titles: ", counter)
output will be like this one:
... Title: Maybe we shouldn't let grandma decide things anymore. Comments: 2018 ---- Title: Carrie Fisher and Her Stunt Double Sunbathing on the Set of Return of The Jedi, 1982 Comments: 880 ---- Title: fidget spinner Comments: 1537 ---- Number of titles: 25
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With