I would solve this problem more like this
import json
import urllib2
def last_song(user, limit):
# Assembling strings with "foo" + str(bar) + "baz" + ... generally isn't
# as nice as using real string formatting. It can seem simpler at first,
# but leaves you less happy in the long run.
url = 'http://gsuser.com/lastSong/%s/%d/' % (user, limit)
# urllib.urlopen is deprecated in favour of urllib2.urlopen
site = urllib2.urlopen(url)
# The json module has a function load for loading from file-like objects,
# like the one you get from `urllib2.urlopen`. You don't need to turn
# your data into a string and use loads and you definitely don't need to
# use readlines or readline (there is seldom if ever reason to use a
# file-like object's readline(s) methods.)
songs = json.load(site)
# I don't know why "lastSong" stuff returns something like this, but
# your json thing was a JSON array of two JSON objects. This will
# deserialise as a list of two dicts, with each item representing
# each of those two songs.
#
# Since each of the songs is represented by a dict, it will iterate
# over its keys (like any other Python dict).
baby, feel_good = songs
# Rather than printing in a function, it's usually better to
# return the string then let the caller do whatever with it.
# You said you wanted to make the output pretty but you didn't
# mention *how*, so here's an example of a prettyish representation
# from the song information given.
return "%(SongName)s by %(ArtistName)s - listen at %(link)s" % baby