分别迭代JSON对象以处理每个帖子

时间:2012-07-24 18:30:48

标签: python json simplejson

我有来自Instagram API的以下JSON对象,它可以有n个帖子(取决于提供的计数参数)。

{
  "pagination": {
    "next_url": "https:\/\/api.instagram.com\/v1\/users\/3\/media\/recent?access_token=184046392.f59def8.c5726b469ad2462f85c7cea5f72083c0&max_id=205140190233104928_3",
    "next_max_id": "205140190233104928_3"
  },
  "meta": {
    "code": 200
  },
  "data": [{
    "attribution": null,
    "tags": [],
    "type": "image",
    "location": {
      "latitude": 37.798594362,
      "name": "Presidio Bowling Center",
      "longitude": -122.459878922,
      "id": 27052
    },
    "comments": {
      "count": 132,
      "data": [{
        "created_time": "1342734265",
        "text": "Distinguishing!",
        "from": {
          "username": "naiicamilos",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_53690312_75sq_1336573463.jpg",
          "id": "53690312",
          "full_name": "Naii Camilos"
        },
        "id": "239194812924826175"
      }, {
        "created_time": "1342737428",
        "text": "@kevin in Spanish Presidio means Jail",
        "from": {
          "username": "jm0426",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_25881992_75sq_1342156673.jpg",
          "id": "25881992",
          "full_name": "Juan Mayen"
        },
        "id": "239221343768285211"
      }, {
        "created_time": "1342768120",
        "text": "Good imagination",
        "from": {
          "username": "kidloca",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_193133903_75sq_1342032241.jpg",
          "id": "193133903",
          "full_name": "Khaleda Noon"
        },
        "id": "239478811731694145"
      }, {
        "created_time": "1342775967",
        "text": "Cwl!",
        "from": {
          "username": "awesomeath",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_179252164_75sq_1339745821.jpg",
          "id": "179252164",
          "full_name": "awesomeath"
        },
        "id": "239544638740894674"
      }, {
        "created_time": "1342796153",
        "text": "\u597d\u7f8e\u263a",
        "from": {
          "username": "hidelau",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_47295330_75sq_1342763977.jpg",
          "id": "47295330",
          "full_name": "Hide Lau"
        },
        "id": "239713963951001995"
      }, {
        "created_time": "1343018007",
        "text": "#mindfreak",
        "from": {
          "username": "info2021",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/anonymousUser.jpg",
          "id": "27664191",
          "full_name": "info2021"
        },
        "id": "241575017119224582"
      }, {
        "created_time": "1343068374",
        "text": "@kevin please share and promote my last pic. This will be the new hype as instagram",
        "from": {
          "username": "thansy_mansy",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_189019343_75sq_1342951587.jpg",
          "id": "189019343",
          "full_name": "thansy_mansy"
        },
        "id": "241997523093295303"
      }, {
        "created_time": "1343068382",
        "text": "@kevin :P",
        "from": {
          "username": "thansy_mansy",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_189019343_75sq_1342951587.jpg",
          "id": "189019343",
          "full_name": "thansy_mansy"
        },
        "id": "241997589589790922"
      }]
    },
    "filter": "Rise",
    "created_time": "1342676212",
    "link": "http:\/\/instagr.am\/p\/NQD4KAABKF\/",
    "likes": {
      "count": 4810,
      "data": [{
        "username": "caitlyn_hammonds",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/anonymousUser.jpg",
        "id": "198322184",
        "full_name": "caitlyn_hammonds"
      }, {
        "username": "sophiafrancis",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_43092892_75sq_1340548333.jpg",
        "id": "43092892",
        "full_name": "Sophiaaa."
      }, {
        "username": "amna7861",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_175807260_75sq_1343135903.jpg",
        "id": "175807260",
        "full_name": "Amna Haroon"
      }, {
        "username": "yaya0318",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_74056_75sq_1287001004.jpg",
        "id": "74056",
        "full_name": "Mao Yaya"
      }, {
        "username": "jay_damage",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_197465040_75sq_1342932411.jpg",
        "id": "197465040",
        "full_name": "jay_damage"
      }, {
        "username": "reves",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_671833_75sq_1335966794.jpg",
        "id": "671833",
        "full_name": "Fernando D. Ramirez"
      }, {
        "username": "lizray1",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_198450407_75sq_1343144120.jpg",
        "id": "198450407",
        "full_name": "lizray1"
      }, {
        "username": "alivewtheglory",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_37907416_75sq_1341561441.jpg",
        "id": "37907416",
        "full_name": "Marilynn C"
      }, {
        "username": "mnforever55",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_29255977_75sq_1334833008.jpg",
        "id": "29255977",
        "full_name": "mnforever55"
      }]
    },
    "images": {
      "low_resolution": {
        "url": "http:\/\/distilleryimage9.s3.amazonaws.com\/beb7f896d16311e19fe21231380f3636_6.jpg",
        "width": 306,
        "height": 306
      },
      "thumbnail": {
        "url": "http:\/\/distilleryimage9.s3.amazonaws.com\/beb7f896d16311e19fe21231380f3636_5.jpg",
        "width": 150,
        "height": 150
      },
      "standard_resolution": {
        "url": "http:\/\/distilleryimage9.s3.amazonaws.com\/beb7f896d16311e19fe21231380f3636_7.jpg",
        "width": 612,
        "height": 612
      }
    },
    "caption": {
      "created_time": "1342676255",
      "text": "Happy birthday @amy !",
      "from": {
        "username": "kevin",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_3_75sq_1325536697.jpg",
        "id": "3",
        "full_name": "Kevin Systrom"
      },
      "id": "238708186813567655"
    },
    "user_has_liked": false,
    "id": "238707833418289797_3",
    "user": {
      "username": "kevin",
      "website": "",
      "bio": "CEO & Co-founder of Instagram",
      "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_3_75sq_1325536697.jpg",
      "full_name": "Kevin Systrom",
      "id": "3"
    }
  }, {
    "attribution": null,
    "tags": [],
    "type": "image",
    "location": {
      "latitude": 38.503100608,
      "name": "Goose & Gander",
      "longitude": -122.468387538,
      "id": 12059278
    },
    "comments": {
      "count": 85,
      "data": [{
        "created_time": "1342555499",
        "text": "Cheers !!! \ud83d\ude18\ud83d\ude18",
        "from": {
          "username": "kattiab",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_1345073_75sq_1340495505.jpg",
          "id": "1345073",
          "full_name": "kattia b"
        },
        "id": "237695212468572732"
      }, {
        "created_time": "1342558279",
        "text": "happy birthday instagram!",
        "from": {
          "username": "alanasayshi",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_4235095_75sq_1341960681.jpg",
          "id": "4235095",
          "full_name": "Alana Boy\u00e9r"
        },
        "id": "237718535382504383"
      }, {
        "created_time": "1342567977",
        "text": "Happy Natal Day Instagram!",
        "from": {
          "username": "cynrtst",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_12493918_75sq_1341538462.jpg",
          "id": "12493918",
          "full_name": "Cynthia L"
        },
        "id": "237799888639758668"
      }, {
        "created_time": "1342568896",
        "text": "Happy Birthday \ud83c\udf89\ud83c\udf89\ud83c\udf89 was it a long labour \ud83d\ude02\ud83d\ude02\ud83d\ude02",
        "from": {
          "username": "relzie",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_15718874_75sq_1332290975.jpg",
          "id": "15718874",
          "full_name": "Relz"
        },
        "id": "237807595966960050"
      }, {
        "created_time": "1342579289",
        "text": "Cheers @kevin and Happy Birthday #instagram thank you so much Kevin for creating instagram it's truly got me back out there taking more photos and falling in love with photography all over again...",
        "from": {
          "username": "bpphotographs",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_12149171_75sq_1339457436.jpg",
          "id": "12149171",
          "full_name": "bpphotographs"
        },
        "id": "237894779172557723"
      }, {
        "created_time": "1342652660",
        "text": "@suz_h",
        "from": {
          "username": "ianyorke",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_1041088_75sq_1339844137.jpg",
          "id": "1041088",
          "full_name": "Ian Yorke"
        },
        "id": "238510264889118973"
      }, {
        "created_time": "1342667574",
        "text": "Love your app\ud83d\udc97\ud83d\udc97\ud83d\udc97\ud83d\udc97\ud83d\udc97",
        "from": {
          "username": "gothangel1997",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_186799125_75sq_1342668825.jpg",
          "id": "186799125",
          "full_name": "Angel Mercado"
        },
        "id": "238635368570687940"
      }, {
        "created_time": "1342843274",
        "text": "\ud83d\ude09\u2764",
        "from": {
          "username": "andescu",
          "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_145554839_75sq_1337641309.jpg",
          "id": "145554839",
          "full_name": "andescu"
        },
        "id": "240109245637333685"
      }]
    },
    "filter": "Sierra",
    "created_time": "1342332400",
    "link": "http:\/\/instagr.am\/p\/NF0G6bABA2\/",
    "likes": {
      "count": 3282,
      "data": [{
        "username": "caysondesigns",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_23464609_75sq_1329177054.jpg",
        "id": "23464609",
        "full_name": "Jasmine at Cayson Designs"
      }, {
        "username": "m_azooz16",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_198179404_75sq_1343096096.jpg",
        "id": "198179404",
        "full_name": "m_azooz16"
      }, {
        "username": "shulinghuang",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_144887495_75sq_1342460246.jpg",
        "id": "144887495",
        "full_name": "H\u3002"
      }, {
        "username": "caitlyn_hammonds",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/anonymousUser.jpg",
        "id": "198322184",
        "full_name": "caitlyn_hammonds"
      }, {
        "username": "sophiafrancis",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_43092892_75sq_1340548333.jpg",
        "id": "43092892",
        "full_name": "Sophiaaa."
      }, {
        "username": "beatle1234",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/anonymousUser.jpg",
        "id": "197988834",
        "full_name": "beatle1234"
      }, {
        "username": "yaya0318",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_74056_75sq_1287001004.jpg",
        "id": "74056",
        "full_name": "Mao Yaya"
      }, {
        "username": "lizray1",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_198450407_75sq_1343144120.jpg",
        "id": "198450407",
        "full_name": "lizray1"
      }, {
        "username": "rawr1234321",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_198492630_75sq_1343151765.jpg",
        "id": "198492630",
        "full_name": "rawr1234321"
      }]
    },
    "images": {
      "low_resolution": {
        "url": "http:\/\/distilleryimage6.s3.amazonaws.com\/3ec59e18ce4311e1b8031231380702ee_6.jpg",
        "width": 306,
        "height": 306
      },
      "thumbnail": {
        "url": "http:\/\/distilleryimage6.s3.amazonaws.com\/3ec59e18ce4311e1b8031231380702ee_5.jpg",
        "width": 150,
        "height": 150
      },
      "standard_resolution": {
        "url": "http:\/\/distilleryimage6.s3.amazonaws.com\/3ec59e18ce4311e1b8031231380702ee_7.jpg",
        "width": 612,
        "height": 612
      }
    },
    "caption": {
      "created_time": "1342332465",
      "text": "Mellivora capensis - eagle rare, peat, honey, lemon, pineapple, black cardamom, chili, coconut foam",
      "from": {
        "username": "kevin",
        "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_3_75sq_1325536697.jpg",
        "id": "3",
        "full_name": "Kevin Systrom"
      },
      "id": "235824269324456712"
    },
    "user_has_liked": false,
    "id": "235823728972271670_3",
    "user": {
      "username": "kevin",
      "website": "",
      "bio": "CEO & Co-founder of Instagram",
      "profile_picture": "http:\/\/images.instagram.com\/profiles\/profile_3_75sq_1325536697.jpg",
      "full_name": "Kevin Systrom",
      "id": "3"
    }
  }, .....

所以我希望单独迭代每个帖子并提取tagsidimage urls。我遇到了一些麻烦,(因为我是一名PHP开发人员,发现很难将Python作为初学者使用)。

这是我用来迭代每个帖子并处理提供的属性的代码。我不想将它们存储在列表或词典中。只想搜索标签。

(这只是一个尝试过的代码,因为我无法找到应该使用的循环)

    info= simplejson.load(info)
    print type(info['data']) # I get it as a list
    for k, v in info['data']:
        print v

我可以使用带有foreach

轻松完成此操作
foreach($info->data as $i) {
   $tags = $i->tags();
   $id = $i->id();
}

1 个答案:

答案 0 :(得分:0)

如果info['data']是一个列表,您应该可以像这样迭代它:

for post in info['data']:
    tags = post['tags']
    id = post['id']
    image_urls = [] # An empty list -- we'll fill it below
    for img_type in ['low_resolution', 'thumbnail', 'standard_resolution']:
        image_urls.append(post['images'][img_type]['url'])
    # Now image_urls has all the image urls in it

我认为与PHP完全不同的部分是,在JSON结构中密钥为"tags"的情况下,您必须在Python中使用字符串"tags",而您将使用文字{{ PHP中的1}}。