处理来自 Python POST 请求的响应

Handling Response from Python POST Request

这里是 Python 的新手,请多多包涵:

我正在使用很棒的请求模块向 Facebook Graph API 发出 POST 请求。这是我的代码:

#! /usr/bin/python
# -*- coding: utf-8 -*-
import requests 


access_token = '9DYWNDXKPsTUkW1TcFZA5E1gUsIhliA0wMc0YZAmcu2Qtd8MtJVW50Y2ZBpnjkw8FH8d5LTmm7AuJ35pQo5'
fburl = 'https://graph-video.facebook.com/v2.3/56914066/videos?access_token='+str(access_token)
payload = {'upload_phase': 'start', 'file_size': '6999244'}
flag = requests.post(fburl, data=payload).text
print flag 

我在我的 Mac OSX 机器上 运行 这个 Python 本地脚本,使用 Python 2.7,来自终端。我从 Facebook API 得到的响应在终端中打印出来:

{"video_id":"635631120558","start_offset":"0","end_offset":"1048576","upload_session_id":"6356311891"}

现在,我假设:

  1. 这个回复是字典,对吗?这是 JSON 回应?

  2. 我还假设这意味着变量 "flag" 是一个 JSON 对象?

我的大问题:我应该能够将 "flag" 作为字典或 JSON 对象进行迭代吗?

对于终端中返回的内容以及我如何处理代码中的 "flag" 变量有点困惑。

您的代码正在调用 requests 对象的 text 方法,因此 (JSON) 响应被转换为一个字符串,然后您将其打印出来。所以你将无法迭代它。

但是,如果您不调用 text,生成的对象应该是 JSON 对象(基于对 Facebook 图表 API 文档),您可以使用内置的 json module 进行迭代。请参阅 解码 JSON 部分。

例如如果你 import json 在你的代码的顶部,你可以做这样的事情:

flagJson = requests.post(fburl, data=payload)
flagDict = json.loads(flagJson)

然后您可以像遍历任何其他 dict 一样遍历 flagDict

根据 OP 的后续评论进行编辑:

json.loads(flagJson) 解码 JSONPython dict 然后可以像任何其他 dict 一样使用。这完全取决于您想用它做什么。最有可能的是,如果你想以任何方式操纵它,你会想要 解码 它,然后你可以迭代它,更改值,以另一种格式写出来,或者编码 将其重新编码为 JSON,并包含您对其所做的任何更改。