【问题标题】:Handling Response from Python POST Request处理来自 Python POST 请求的响应
【发布时间】:2015-06-28 01:58:12
【问题描述】:

这里是 Python 新手,请耐心等待:

我正在使用很棒的 Requests 模块向 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 对象?

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

对终端中返回的内容以及如何处理代码中的“标志”变量有点困惑。

【问题讨论】:

    标签: python json loops dictionary python-requests


    【解决方案1】:

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

    但是,如果您不调用 text,则生成的对象应该是 JSON 对象(基于快速浏览 Facebook Graph 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 一样使用。这一切都取决于你想用它做什么。最有可能的是,如果您想以任何方式对其进行操作,您将需要 decode 它,然后您可以对其进行迭代、更改值、以另一种格式写出,或者 将其编码JSON,并使用您对其进行的任何更改。

    【讨论】:

    • 感谢您如此简洁的分解,现在明白了!
    • 玩过这个之后有一个问题:如果我们在 POST 请求中去掉 .text ,从而允许 Facebook 的服务器响应保持为 JSON 对象,我是否必须从他们的服务器使用 json.loads(flag)?这究竟是做什么的?
    • 只是为了记录:你甚至不需要手动调用json.loads()-request.post(fburl, data=payload).json()会处理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多