【问题标题】:Get value from ID JSON response surveymonkey API v3从 ID JSON 响应surveymonkey API v3 中获取价值
【发布时间】:2017-06-26 11:53:35
【问题描述】:

我对此很陌生,非常感谢任何指导或帮助。

我目前有一份来自以下电话的调查回复列表:

import requests
import json

client = requests.session()

headers = {
    "Authorization": "bearer %s" % "AccessTOKEN",
    "Content-Type": "application/json"
}

HOST = "https://api.surveymonkey.net"
SURVEY_LIST_ENDPOINT = "/v3/surveys/SURVEYID/responses/bulk"

uri = "%s%s" % (HOST, SURVEY_LIST_ENDPOINT)

response = client.get(uri, headers=headers)

response_json = response.json()

print(response_json['data'])

我收到以下回复:

{
  "per_page": 50,
  "total": 5114,
  "data": [
    {
      "total_time": 40,
      "href": "https://api.surveymonkey.net/v3/surveys/surveyID/responses/ID",
      "custom_variables": {},
      "ip_address": "IP ADDRESS",
      "id": "ID",
      "logic_path": {},
      "date_modified": "2015-12-01T05:31:22+00:00",
      "response_status": "completed",
      "custom_value": "",
      "analyze_url": "http://www.surveymonkey.com/analyze/browse/ID?respondent_id=ID",
      "pages": [
        {
          "id": "220527570",
          "questions": [
            {
              "id": "872991507",
              "answers": [
                {
                  "choice_id": "9573882449",
                  "row_id": "9573882439"
                }
              ]

我想从choice_id 中获取实际的响应值,例如“Yes, No, Maybe”?

非常感谢提前, 庞

【问题讨论】:

    标签: json python-3.x surveymonkey


    【解决方案1】:

    目前没有从 API 返回的直接有效负载也包含答案文本。

    您需要先获取您的survey details

    SURVEY_DETAIL_ENDPOINT = "/v3/surveys/SURVEYID/details"
    uri = "%s%s" % (HOST, SURVEY_DETAIL_ENDPOINT)
    
    response = client.get(uri, headers=headers)
    
    survey_data = response.json()
    

    然后,您可能希望遍历答案以创建查找字典。大概是这样的:

    answer_dict = {}
    for page in survey_data['pages']:
        for question in page['questions']:
    
            # Rows, choices, other, and cols all make up the possible answers
            answers = question['answers'].get('rows', [])\
                + question['answers'].get('choices', [])\
                + question['answers'].get('other', [])\
                + question['answers'].get('cols', [])
    
            for answer in answers:
                answer_dict[answer['id']] = answer
    

    我知道 for 循环看起来很粗糙,但您基本上只是遍历整个调查。这是因为选项 ID 是全局唯一的(即列、行、选项等之间没有冲突)。

    然后,您可以通过对响应中的任何answer 执行answer_dict[answer['choice_id']] 轻松获取整个答案详细信息。

    如果 API 本身允许一个选项来为您填写响应文本,那将是一个不错的主意。

    【讨论】:

    • @GeneralKandalaft:很抱歉疏通了这个问题,但已接受答案中的代码不适用于没有答案的问题,并且看起来“col”类型已更改为 dicts。我得到: Traceback(最近一次通话最后):文件“survey-monkey-api-testing.py”,第 67 行,在 + question['answers'].get('other', []) \ TypeError: can only concatenate list (not "dict") to list 知道如何更新吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多