Decode json and Iterate through items in django template

jon21021985 picture jon21021985 · Mar 16, 2011 · Viewed 13.2k times · Source

Hi I am using simplejson to import some json and then decode for use within a django template,

this is the decoded json:

{u'ServerID': 1, u'Cache': {u'CacheBusted': False, u'FromCache': True}, u'Result': [{u'Url': u'http://listen.grooveshark.com/playlist/Soul_Power/399134', u'Cache': {u'FromCache': True}, u'PlaylistID': u'399134', u'Name': u'Soul Power', u'ModifiedTime': u'1229427645'}, {u'Url': u'http://listen.grooveshark.com/playlist/4RK_(v.3)/491934', u'Cache': {u'FromCache': True}, u'PlaylistID': u'491934', u'Name': u'4RK (v.3)', u'ModifiedTime': u'1231028348'}, {u'Url': u'http://listen.grooveshark.com/playlist/My_Bands/3735842', u'Cache': {u'FromCache': True}, u'PlaylistID': u'3735842', u'Name': u'My Bands', u'ModifiedTime': u'1234384383'}, {u'Url': u'http://listen.grooveshark.com/playlist/Go_Move_Cruise/19255842', u'Cache': {u'FromCache': True}, u'PlaylistID': u'19255842', u'Name': u'Go Move Cruise', u'ModifiedTime': u'1259081222'}, {u'Url': u'http://listen.grooveshark.com/playlist/Goodnight/19854340', u'Cache': {u'FromCache': True}, u'PlaylistID': u'19854340', u'Name': u'Goodnight', u'ModifiedTime': u'1259457504'}, {u'Url': u"http://listen.grooveshark.com/playlist/Bottle_Poppin'_with_Friends_&_Scarfs/22398199", u'Cache': {u'FromCache': True}, u'PlaylistID': u'22398199', u'Name': u"Bottle Poppin' with Friends & Scarfs", u'ModifiedTime': u'1262525701'}, {u'Url': u'http://listen.grooveshark.com/playlist/Primer/23525296', u'Cache': {u'FromCache': True}, u'PlaylistID': u'23525296', u'Name': u'Primer', u'ModifiedTime': u'1264372296'}, {u'Url': u'http://listen.grooveshark.com/playlist/The_Snake_The_Cross_The_Crown/23863213', u'Cache': {u'FromCache': True}, u'PlaylistID': u'23863213', u'Name': u'The Snake The Cross The Crown', u'ModifiedTime': u'1264884692'}, {u'Url': u'http://listen.grooveshark.com/playlist/Ward/24957740', u'Cache': {u'FromCache': True}, u'PlaylistID': u'24957740', u'Name': u'Ward', u'ModifiedTime': u'1265843831'}, {u'Url': u'http://listen.grooveshark.com/playlist/NeuroLinguistic_Programming/26526478', u'Cache': {u'FromCache': True}, u'PlaylistID': u'26526478', u'Name': u'Neuro-Linguistic Programming', u'ModifiedTime': u'1268957617'}, {u'Url': u'http://listen.grooveshark.com/playlist/ISO50_Playlist_#8/27319532', u'Cache': {u'FromCache': True}, u'PlaylistID': u'27319532', u'Name': u'ISO50 Playlist #8', u'ModifiedTime': u'1270560957'}, {u'Url': u'http://listen.grooveshark.com/playlist/Caribou_Swim/27959307', u'Cache': {u'FromCache': True}, u'PlaylistID': u'27959307', u'Name': u'Caribou - Swim', u'ModifiedTime': u'1271811201'}, {u'Url': u'http://listen.grooveshark.com/playlist/Del/28944659', u'Cache': {u'FromCache': True}, u'PlaylistID': u'28944659', u'Name': u'Del', u'ModifiedTime': u'1273576988'}, {u'Url': u'http://listen.grooveshark.com/playlist/ISO50_Playlist_#7/29740328', u'Cache': {u'FromCache': True}, u'PlaylistID': u'29740328', u'Name': u'ISO50 Playlist #7', u'ModifiedTime': u'1274878455'}, {u'Url': u'http://listen.grooveshark.com/playlist/Axe_Atac/29827929', u'Cache': {u'FromCache': True}, u'PlaylistID': u'29827929', u'Name': u'Axe A-tac', u'ModifiedTime': u'1274999610'}, {u'Url': u'http://listen.grooveshark.com/playlist/Finding_Candy/31280614', u'Cache': {u'FromCache': True}, u'PlaylistID': u'31280614', u'Name': u'Finding Candy', u'ModifiedTime': u'1277587721'}, {u'Url': u'http://listen.grooveshark.com/playlist/Tobacco_Fingerlicked_Up_Friends/32410276', u'Cache': {u'FromCache': True}, u'PlaylistID': u'32410276', u'Name': u'Tobacco - Fingerlicked Up Friends', u'ModifiedTime': u'1279650743'}, {u'Url': u'http://listen.grooveshark.com/playlist/Broken_Social_Scene_Forgiveness_Rock_Band/32410310', u'Cache': {u'FromCache': True}, u'PlaylistID': u'32410310', u'Name': u'Broken Social Scene - Forgiveness Rock Band', u'ModifiedTime': u'1279650795'}, {u'Url': u'http://listen.grooveshark.com/playlist/Yeasayer_All_Hour_Cymbals/32410328', u'Cache': {u'FromCache': True}, u'PlaylistID': u'32410328', u'Name': u'Yeasayer - All Hour Cymbals', u'ModifiedTime': u'1279650820'}, {u'Url': u'http://listen.grooveshark.com/playlist/Yeasayer_Odd_Blood/32410341', u'Cache': {u'FromCache': True}, u'PlaylistID': u'32410341', u'Name': u'Yeasayer - Odd Blood', u'ModifiedTime': u'1279650839'}, {u'Url': u'http://listen.grooveshark.com/playlist/The_Chemical_Brothers_Further/32410395', u'Cache': {u'FromCache': True}, u'PlaylistID': u'32410395', u'Name': u'The Chemical Brothers - Further', u'ModifiedTime': u'1279650906'}, {u'Url': u'http://listen.grooveshark.com/playlist/Why?_Alopecia/32694517', u'Cache': {u'FromCache': True}, u'PlaylistID': u'32694517', u'Name': u'Why? - Alopecia', u'ModifiedTime': u'1280139036'}, {u'Url': u'http://listen.grooveshark.com/playlist/Ben_Frost_By_The_Throat/34275177', u'Cache': {u'FromCache': True}, u'PlaylistID': u'34275177', u'Name': u'Ben Frost - By The Throat', u'ModifiedTime': u'1282579712'}, {u'Url': u'http://listen.grooveshark.com/playlist/Digitalism_Idealism/34422107', u'Cache': {u'FromCache': True}, u'PlaylistID': u'34422107', u'Name': u'Digitalism - Idealism', u'ModifiedTime': u'1282771579'}, {u'Url': u'http://listen.grooveshark.com/playlist/Bun_B_Trill_O.G._[Deluxe_Edition]/34914808', u'Cache': {u'FromCache': True}, u'PlaylistID': u'34914808', u'Name': u'Bun B - Trill O.G. [Deluxe Edition]', u'ModifiedTime': u'1283438827'}, {u'Url': u'http://listen.grooveshark.com/playlist/Simian_Mobile_Disco_Attack_Decay_Sustain_Release/35054649', u'Cache': {u'FromCache': False}, u'PlaylistID': u'35054649', u'Name': u'Simian Mobile Disco - Attack Decay Sustain Release', u'ModifiedTime': u'1283640118'}, {u'Url': u'http://listen.grooveshark.com/playlist/Salem_King_Knight/35268471', u'Cache': {u'FromCache': True}, u'PlaylistID': u'35268471', u'Name': u'Salem - King Knight', u'ModifiedTime': u'1283972703'}, {u'Url': u'http://listen.grooveshark.com/playlist/Maxence_Cyrin_Novo_Piano/36527813', u'Cache': {u'FromCache': True}, u'PlaylistID': u'36527813', u'Name': u'Maxence Cyrin - Novo Piano', u'ModifiedTime': u'1285872470'}, {u'Url': u'http://listen.grooveshark.com/playlist/Fingerlick_Buttons_Tarot_Sport/33635471', u'Cache': {u'FromCache': True}, u'PlaylistID': u'33635471', u'Name': u'Fingerlick Buttons - Tarot Sport', u'ModifiedTime': u'1281633330'}, {u'Url': u'http://listen.grooveshark.com/playlist/Scrappy/37988906', u'Cache': {u'FromCache': True}, u'PlaylistID': u'37988906', u'Name': u'Scrappy', u'ModifiedTime': u'1287967005'}, {u'Url': u'http://listen.grooveshark.com/playlist/The_Green_Album_Omer_Saar/40654922', u'Cache': {u'FromCache': True}, u'PlaylistID': u'40654922', u'Name': u'The Green Album - Omer Saar', u'ModifiedTime': u'1291818391'}, {u'Url': u'http://listen.grooveshark.com/playlist/Murdered_Out/7479852', u'Cache': {u'FromCache': True}, u'PlaylistID': u'7479852', u'Name': u'Murdered Out', u'ModifiedTime': u'1236897259'}, {u'Url': u'http://listen.grooveshark.com/playlist/Hot_and_Tired/27931954', u'Cache': {u'FromCache': True}, u'PlaylistID': u'27931954', u'Name': u'Hot and Tired', u'ModifiedTime': u'1271772133'}, {u'Url': u'http://listen.grooveshark.com/playlist/SawTooth_Bass/18284890', u'Cache': {u'FromCache': False}, u'PlaylistID': u'18284890', u'Name': u'Saw-Tooth Bass', u'ModifiedTime': u'1256910446'}, {u'Url': u'http://listen.grooveshark.com/playlist//\\/\\/\\/\\/\\/\\//27216709', u'Cache': {u'FromCache': False}, u'PlaylistID': u'27216709', u'Name': u'/\\/\\/\\/\\/\\/\\/', u'ModifiedTime': u'1270332371'}, {u'Url': u'http://listen.grooveshark.com/playlist/ISO50_Playlist_#10/38892561', u'Cache': {u'FromCache': True}, u'PlaylistID': u'38892561', u'Name': u'ISO50 Playlist #10', u'ModifiedTime': u'1289155227'}, {u'Url': u'http://listen.grooveshark.com/playlist/Chill_Rap/4516', u'Cache': {u'FromCache': True}, u'PlaylistID': u'4516', u'Name': u'Chill Rap', u'ModifiedTime': u'1201712529'}, {u'Url': u'http://listen.grooveshark.com/playlist/The_Basement/29007410', u'Cache': {u'FromCache': True}, u'PlaylistID': u'29007410', u'Name': u'The Basement', u'ModifiedTime': u'1273668603'}, {u'Url': u'http://listen.grooveshark.com/playlist/Fingerlicking_Awesome_Mashups/36954458', u'Cache': {u'FromCache': True}, u'PlaylistID': u'36954458', u'Name': u'Fingerlicking Awesome Mashups', u'ModifiedTime': u'1286489257'}, {u'Url': u'http://listen.grooveshark.com/playlist/The_Augustine/29939116', u'Cache': {u'FromCache': True}, u'PlaylistID': u'29939116', u'Name': u'The Augustine', u'ModifiedTime': u'1275215560'}, {u'Url': u'http://listen.grooveshark.com/playlist/Best_Of_Wu/15335431', u'Cache': {u'FromCache': True}, u'PlaylistID': u'15335431', u'Name': u'Best Of Wu', u'ModifiedTime': u'1250298301'}, {u'Url': u'http://listen.grooveshark.com/playlist/ISO50_Presents:_Dry_Waves/40210604', u'Cache': {u'FromCache': True}, u'PlaylistID': u'40210604', u'Name': u'ISO50 Presents: Dry Waves', u'ModifiedTime': u'1291138412'}, {u'Url': u'http://listen.grooveshark.com/playlist/ReUp_Gang_We_Got_It_4_Cheap_Volume_3/43589616', u'Cache': {u'FromCache': True}, u'PlaylistID': u'43589616', u'Name': u'Re-Up Gang - We Got It 4 Cheap Volume 3', u'ModifiedTime': u'1297612447'}, {u'Url': u'http://listen.grooveshark.com/playlist/ISO50_Playlist_#9/35248549', u'Cache': {u'FromCache': True}, u'PlaylistID': u'35248549', u'Name': u'ISO50 Playlist #9', u'ModifiedTime': u'1283952285'}, {u'Url': u'http://listen.grooveshark.com/playlist/PostRock_Playboy/6183030', u'Cache': {u'FromCache': True}, u'PlaylistID': u'6183030', u'Name': u'Post-Rock Playboy', u'ModifiedTime': u'1236008915'}, {u'Url': u'http://listen.grooveshark.com/playlist/Ambient_Electronic/376180', u'Cache': {u'FromCache': True}, u'PlaylistID': u'376180', u'Name': u'Ambient Electronic', u'ModifiedTime': u'1229023391'}, {u'Url': u'http://listen.grooveshark.com/playlist/Man_On_The_Moon_II:_The_Legend_Of_Mr._Rager/38994029', u'Cache': {u'FromCache': True}, u'PlaylistID': u'38994029', u'Name': u'Man On The Moon II: The Legend Of Mr. Rager', u'ModifiedTime': u'1289301711'}, {u'Url': u'http://listen.grooveshark.com/playlist/Ghostface_Killah_Apollo_Kids/43155947', u'Cache': {u'FromCache': True}, u'PlaylistID': u'43155947', u'Name': u'Ghostface Killah - Apollo Kids', u'ModifiedTime': u'1296741352'}, {u'Url': u'http://listen.grooveshark.com/playlist/All_Funk/2528', u'Cache': {u'FromCache': True}, u'PlaylistID': u'2528', u'Name': u'All Funk', u'ModifiedTime': u'1195084800'}, {u'Url': u'http://listen.grooveshark.com/playlist/Bearbot_Evocation/39236538', u'Cache': {u'FromCache': True}, u'PlaylistID': u'39236538', u'Name': u'Bearbot - Evocation', u'ModifiedTime': u'1289595559'}], u'Success': True, u'RateLimit': {u'CacheBusts': 0, u'ResetTime': 1300238204, u'CallsRemaining': 151, u'CallsMade': 48, u'RemainingSecs': 1256}}

I need the following for each item in result:

• Url • PlaylistID • Name

from the dictionary, but I was wondering if I need to tidy/sort this data in my views.py before I pass the data to the django template? and then how do I loop through this so I get

  • Result1: URL, PlaylistID, Name
  • Result2: URL, PlaylistID, Name
  • Result3: URL, PlaylistID, Name
  • Result4: URL, PlaylistID, Name ...etc

I am just learning python so any help or suggestions are appreciated.

thanks Jon

Answer

Chris W. picture Chris W. · Mar 16, 2011

Once you've used Python's json or simplejson module to load the JSON data into Python objects, everything should just work in your template.

Before sending things to your template I would pull out the results like so...

def foo_view(request):
    ....
    decoded_json = json.loads(json_string)
    return render_to_response('foo.html',{'results':decoded_json['Result']})

That way in your template you'll be able to work on each result like so...

<ul id="results">
     {% for result in results %}
     <li>Result{{ forloop.counter }}: {{ result.URL }}, {{ result.PlaylistID }}, {{ result.Name }} ...</li>
     {% endfor %}
</ul>

The data in the output will appear in the same order as it did in the JSON array at Results. If you need to sort the data then you will need to do that in your view, NOT in your template.