从Survey Monkey返回错误的JSON(get_survey_list)

时间:2014-08-03 19:34:18

标签: php json laravel-4 surveymonkey

我一直在尝试从他们的Survey Monkey帐户中为客户提取调查数据,似乎他们的数据越多,非法字符就越可能被引入到生成的JSON字符串中。

下面是一个错误响应返回的示例,每个响应都不同,甚至更短的请求有时会失败,让我错过。

{
  "survey_id": "REDACTED",
  "title": "REDACTED",
  "date_modified": "2014-XX-18 17:59:00",
  "num_responses": 0,
  "date_created": "�2014-01-21 10:29:00",
  "question_count": 102
}

我无法理解为什么会发生这种情况,字段选项中的参数越多,引入的非法字符就越多。它不仅仅是非法的无效字符,有时还会输入随机字母,这会阻止我正确处理数据。

我正在使用Laravel 4和oori的第三方Survey Monkey库 https://github.com/oori/php-surveymonkey

任何帮助都会在追踪问题时受到赞赏,截止日期非常紧张,如果无法解决,我将不得不求助客户手动导入不理想的CSV文件并引入可能的用户错误。

另外,在Survey Monkey控制台上使用相同参数时,我没有看到此问题出现。

操作系统:带有WAMP服务器的Windows 8.1

用于执行请求的代码

$Surveys = SurveyMonkey::getSurveyList(array
(
    'page_size' => 1000,
    'fields' => array
    (
            'title', 'question_count', 'num_responses', 'date_created', 'date_modified'
    )        
));

SurveyMonkey外观是一个自定义包,用于集成位于此处的原始Survey Monkey库: https://github.com/oori/php-surveymonkey/blob/master/SurveyMonkey.class.php

原始PHP cURL请求

$header = array('Content-Type: application/json','Authorization: Bearer REDACTED');
$post = json_encode(array(
    'fields' => array(
        'title', 'question_count', 'num_responses', 'date_created', 'date_modified'
    )
));
$post = json_encode($post);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.surveymonkey.net/v2/surveys/get_survey_list?api_key=REDACTED");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch);

上述请求返回相同的麻烦字符,没有其他任何东西用于获取响应。

使用以下代码

echo "\n".mb_detect_encoding($result, 'UTF-8', true);

此代码显示响应的字符集,如果成功且没有非法字符(在错误的位置仍然存在随机字符)它返回它实际上是UTF-8,当存在非法字符时返回false所以没有输出。通常会返回false。

1 个答案:

答案 0 :(得分:0)

如果是这样的话,我可能会过分夸大整个事情并道歉,但我也有这些有趣的小字符。 他们领先并留下空白。 你可以修剪检索数据并查看它是否仍然存在?