Compruebe si el JSON (propiedad del objeto existe) e imprímalo como unicode decodificado

Obtengo los siguientes datos de la API de Instagram . Estoy tratando de obtener la property texto del caption usando el siguiente código:

 data = simplejson.load(info) # info is retrieved using the urllib2 for post in data['data']: if post['caption'] is not "null": try: post['caption']['text'] except NameError: post['caption']['text'] = 0 if post['caption']['text'] is not 0: print post['caption']['text'] 

Pero sigo obteniendo el TypeError: 'NoneType' object has no attribute '__getitem__' error + UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-5: cha racter maps to error UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-5: cha racter maps to al imprimir las cadenas Unicode

Aquí están los datos JSON que se recuperan y almacenan en la info

 { "pagination":{ "next_url":"https:\/\/api.instagram.com\/v1\/users\/self\/feed?access_token=184046392.f59def8.c5726b469ad2462f85c7cea5f72083c0&count=3&max_id=247821697921944007_6064449", "next_max_id":"247821697921944007_6064449" }, "meta":{ "code":200 }, "data":[ { "attribution":null, "tags":[ "usausausa", "olympics" ], "type":"image", "location":{ "latitude":37.785929, "name":"Aquatech Swim School", "longitude":-122.278718, "id":16343815 }, "comments":{ "count":0, "data":[ ] }, "filter":"Valencia", "created_time":"1343765260", "link":"http:\/\/instagr.am\/p\/NwhEktJvEp\/", "likes":{ "count":0, "data":[ ] }, "images":{ "low_resolution":{ "url":"http:\/\/distilleryimage1.s3.amazonaws.com\/61d9cbeedb4b11e1b8e822000a1e8b8e_6.jpg", "width":306, "height":306 }, "thumbnail":{ "url":"http:\/\/distilleryimage1.s3.amazonaws.com\/61d9cbeedb4b11e1b8e822000a1e8b8e_5.jpg", "width":150, "height":150 }, "standard_resolution":{ "url":"http:\/\/distilleryimage1.s3.amazonaws.com\/61d9cbeedb4b11e1b8e822000a1e8b8e_7.jpg", "width":612, "height":612 } }, "caption":{ "created_time":"1343765325", "text":"Part of my job to watch swimming. #olympics #USAUSAUSA", "from":{ "username":"kissinkatkelly", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_4672491_75sq_1341713095.jpg", "id":"4672491", "full_name":"kissinkatkelly" }, "id":"247843973390332239" }, "user_has_liked":false, "id":"247843429330383145_4672491", "user":{ "username":"kissinkatkelly", "website":"", "bio":"I sing the body electric\r\n\r\nBay Area, CA", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_4672491_75sq_1341713095.jpg", "full_name":"kissinkatkelly", "id":"4672491" } }, { "attribution":null, "tags":[ ], "type":"image", "location":{ "latitude":36.020832061, "longitude":-121.548835754 }, "comments":{ "count":4, "data":[ { "created_time":"1343763343", "text":"I wanna cut your mustache off. \ue313\ue313\ue313\ue004", "from":{ "username":"glorias_noodles", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_24432017_75sq_1343633079.jpg", "id":"24432017", "full_name":"\ue340MeGusta Gloria\ue340" }, "id":"247827343962686703" }, { "created_time":"1343763844", "text":"Ahaha^", "from":{ "username":"chloe_carter", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_44766575_75sq_1343509145.jpg", "id":"44766575", "full_name":"Chloe Carter" }, "id":"247831551235474746" }, { "created_time":"1343763958", "text":"Amazingg thoo", "from":{ "username":"saulyp", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_18051263_75sq_1335648741.jpg", "id":"18051263", "full_name":"Saul Perez" }, "id":"247832506790200642" }, { "created_time":"1343764298", "text":"@popesaintvictor where is that? :o", "from":{ "username":"youknow_jameson", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_194001394_75sq_1343613135.jpg", "id":"194001394", "full_name":"Jameson Medina" }, "id":"247835358103225704" } ] }, "filter":"Normal", "created_time":"1343763202", "link":"http:\/\/instagr.am\/p\/NwdJRpBkfX\/", "likes":{ "count":611, "data":[ { "username":"jakyvedder", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_18148021_75sq_1336938690.jpg", "id":"18148021", "full_name":"Janycken" }, { "username":"nadjasinbruker", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_174576513_75sq_1343582260.jpg", "id":"174576513", "full_name":"Nadja" }, { "username":"vivi11", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_1193390_75sq_1338169730.jpg", "id":"1193390", "full_name":"Viviana Rodriguez" }, { "username":"me_4_eva", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_181498114_75sq_1343506811.jpg", "id":"181498114", "full_name":"Kelly" }, { "username":"roxczajkowski", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_9367244_75sq_1343696914.jpg", "id":"9367244", "full_name":"Czajkowski \u041a\u043e\u0440\u0448\u0443\u043d\u043e\u0432\u0430" }, { "username":"arsi1989", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_201586134_75sq_1343761866.jpg", "id":"201586134", "full_name":"Arsalan MemOn" }, { "username":"puppyluva", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_201579504_75sq_1343760137.jpg", "id":"201579504", "full_name":"puppyluva" }, { "username":"paulinamurr", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_49364097_75sq_1343428499.jpg", "id":"49364097", "full_name":"Paulina Murray" }, { "username":"_mcquadeface_", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_20679753_75sq_1327617901.jpg", "id":"20679753", "full_name":"Emily McQuade" } ] }, "images":{ "low_resolution":{ "url":"http:\/\/distilleryimage11.s3.amazonaws.com\/96cd5b90db4611e1827612313814176c_6.jpg", "width":306, "height":306 }, "thumbnail":{ "url":"http:\/\/distilleryimage11.s3.amazonaws.com\/96cd5b90db4611e1827612313814176c_5.jpg", "width":150, "height":150 }, "standard_resolution":{ "url":"http:\/\/distilleryimage11.s3.amazonaws.com\/96cd5b90db4611e1827612313814176c_7.jpg", "width":612, "height":612 } }, "caption":null, "user_has_liked":false, "id":"247826160271378391_605400", "user":{ "username":"popesaintvictor", "website":"http:\/\/popesaintvictor.com", "bio":"artist, friend, and brand designer for blood:water mission in nashville, tennessee. \r\n\r\nhusband to @ohsoamy\r\n\r\nbe inspired. be awesome.\r\n", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_605400_75sq_1342893414.jpg", "full_name":"pope saint victor", "id":"605400" } }, { "attribution":null, "tags":[ ], "type":"image", "location":{ "latitude":40.738834381, "longitude":-73.994163513 }, "comments":{ "count":6, "data":[ { "created_time":"1343762733", "text":"Nice :)", "from":{ "username":"belieberpernille99", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_186196238_75sq_1341347304.jpg", "id":"186196238", "full_name":"official belieber" }, "id":"247822232418879860" }, { "created_time":"1343762748", "text":"Those pants \ud83d\ude0d", "from":{ "username":"morganmarzulli", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_29155556_75sq_1337653621.jpg", "id":"29155556", "full_name":"morganmarzulli" }, "id":"247822351461615990" }, { "created_time":"1343762777", "text":"That outfit is to die for. I love her pants! They're so fun. \ud83d\udc4d", "from":{ "username":"ninavnegron", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_18421926_75sq_1343356820.jpg", "id":"18421926", "full_name":"Nina V" }, "id":"247822600452278654" }, { "created_time":"1343762782", "text":"YEAH THEIR COOL", "from":{ "username":"belieberpernille99", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_186196238_75sq_1341347304.jpg", "id":"186196238", "full_name":"official belieber" }, "id":"247822639375419775" }, { "created_time":"1343762782", "text":"Another day another shoot! Look out for me and my chicest staff on @racked!", "from":{ "username":"rebeccaminkoff", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_6064449_75sq_1332274636.jpg", "id":"6064449", "full_name":"Rebecca Minkoff" }, "id":"247822641497737600" }, { "created_time":"1343764430", "text":"Hot mama! Miss you!", "from":{ "username":"ashleekoston", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_12925089_75sq_1340081366.jpg", "id":"12925089", "full_name":"ashleekoston" }, "id":"247836463642020446" } ] }, "filter":"Walden", "created_time":"1343762670", "link":"http:\/\/instagr.am\/p\/NwcIVwRYnH\/", "likes":{ "count":528, "data":[ { "username":"clairyoung48", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_40091175_75sq_1338778945.jpg", "id":"40091175", "full_name":"clairyoung48" }, { "username":"l_christine_k", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_14871166_75sq_1341962995.jpg", "id":"14871166", "full_name":"Lauren Kawano" }, { "username":"grcdaly", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_41426567_75sq_1335023058.jpg", "id":"41426567", "full_name":"\u24bc\u24c7\u24b6\u24b8\u24ba \u24b9\u24b6\u24c1\u24e8" }, { "username":"vanessaalcalaa", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_18115905_75sq_1342828120.jpg", "id":"18115905", "full_name":"Vanessa Alcala" }, { "username":"makennalenover", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_6464394_75sq_1343268613.jpg", "id":"6464394", "full_name":"Makenna Lenover" }, { "username":"heyitsmaryanne", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_623979_75sq_1340838647.jpg", "id":"623979", "full_name":"Maryanne L" }, { "username":"sarabeen", "profile_picture":"http:\/\/images.instagram.com\/profiles\/anonymousUser.jpg", "id":"6463387", "full_name":"sarabeen" }, { "username":"boldincrimson", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_191122242_75sq_1341889110.jpg", "id":"191122242", "full_name":"Pilar Chapa" }, { "username":"elizzabethhope", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_6761399_75sq_1342553102.jpg", "id":"6761399", "full_name":"Lizz\u270c" } ] }, "images":{ "low_resolution":{ "url":"http:\/\/distilleryimage7.s3.amazonaws.com\/59bc708edb4511e1b7ea22000a1cbb16_6.jpg", "width":306, "height":306 }, "thumbnail":{ "url":"http:\/\/distilleryimage7.s3.amazonaws.com\/59bc708edb4511e1b7ea22000a1cbb16_5.jpg", "width":150, "height":150 }, "standard_resolution":{ "url":"http:\/\/distilleryimage7.s3.amazonaws.com\/59bc708edb4511e1b7ea22000a1cbb16_7.jpg", "width":612, "height":612 } }, "caption":null, "user_has_liked":false, "id":"247821697921944007_6064449", "user":{ "username":"rebeccaminkoff", "website":"http:\/\/www.rebeccaminkoff.com", "bio":"The Downtown Romantic. My life, my work, my world.", "profile_picture":"http:\/\/images.instagram.com\/profiles\/profile_6064449_75sq_1332274636.jpg", "full_name":"Rebecca Minkoff", "id":"6064449" } } ] } 

No es necesario que las pruebas intrincadas en ‘texto’ estén presentes para el subtítulo de la publicación. Este código funciona bien con la cadena JSON que publicaste:

 for post in data['data']: if post.get('caption'): print post['caption'].get('text', 0) 

Además, podría estar más a la defensiva y consultar data.get('data', []) cuando inicie el ciclo en caso de que Instagram le envíe un JSON vacío.

Básicamente, cuando json carga y deserializa su objeto, el null en JSON se convertirá en None en Python.

Así que su línea de:

if post['caption'] is not 'null':

Debe convertirse:

if post['caption']: