Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP发送JSON数组(活动监视器)_Php_Arrays_Json_Email_Campaign Monitor - Fatal编程技术网

通过PHP发送JSON数组(活动监视器)

通过PHP发送JSON数组(活动监视器),php,arrays,json,email,campaign-monitor,Php,Arrays,Json,Email,Campaign Monitor,我有一个标记为sample.txt的示例JSON数组,它是从捕获用户名和电子邮件的抽奖表单发送的。我使用WooBox,因此JSON数组按每个条目发送信息,因此这里有两个条目: 在前面的一个问题上,我被告知要打破[1],以便JSON_ENCODE可以计算出单独的条目。我只想捕获名称和电子邮件,并将数组导入我的电子邮件数据库(活动监视器) 我的问题是:如何将JSON变量标签添加到数组中?如果您看到我的代码,我尝试使用标签$email。这是正确的形式还是应该是带有for循环的email[0] $ur

我有一个标记为sample.txt的示例JSON数组,它是从捕获用户名和电子邮件的抽奖表单发送的。我使用WooBox,因此JSON数组按每个条目发送信息,因此这里有两个条目:

在前面的一个问题上,我被告知要打破[1],以便JSON_ENCODE可以计算出单独的条目。我只想捕获名称和电子邮件,并将数组导入我的电子邮件数据库(活动监视器)

我的问题是:如何将JSON变量标签添加到数组中?如果您看到我的代码,我尝试使用标签$email。这是正确的形式还是应该是带有for循环的email[0]

 $url = 'http://www.mywebsite.com/sweeps/test.txt';
 $content = file_get_contents($url);
 $json = json_decode($content,true);

 $tmp = explode('][', $json_string);
 if (!count($tmp)) {
 $json = json_decode($json_string);

 var_dump($json);
 } else {
 foreach ($tmp as $json_part) {
    $json = json_decode('['.rtrim(ltrim($json_string, '['), ']').']');

    var_dump($json);
}
}
 require_once 'csrest_general.php';
 require_once 'csrest_subscribers.php';

 $auth = array(
 'api_key' => 'xxxxxxxxxxxxxxx');
 $wrap = new CS_REST_Subscribers('xxxxxxxxxx', $auth);
 $result = $wrap->add($json(
'EmailAddress' => $email,
'Name' => $custom_3_first,
'Resubscribe' => false
 ));

这应该相当容易:如果你有一个JSON字符串,并且你在上面调用了
JSON\u decode($string,true)
,你可以在一个PHP变量中得到它的等价物,简单明了。从那里,你可以像访问任何PHP数组、对象一样访问它

问题是,您没有一个正确的JSON字符串。您有一个看起来像JSON的字符串,但不是有效的JSON。通过运行它,您将了解我的意思

PHP不知道如何处理假定的JSON,因此您必须求助于手动解析,这不是我推荐的路径

require_once 'csrest_general.php';
require_once 'csrest_subscribers.php';

$auth = array('api_key' => 'xxxxxxxxxxxxxxx');
$wrap = new CS_REST_Subscribers('xxxxxxxxxx', $auth);

$url = 'http://www.mywebsite.com/sweeps/test.txt';
$content = file_get_contents($url);    
$tmp = explode('][', $content);
foreach ($tmp as $json_part) {
   $user = json_decode('['.rtrim(ltrim($json_string, '['), ']').']', true);
   $result = $wrap->add(array(
        'EmailAddress' => $user->email,
        'Name' => $user->fullname,
        'Resubscribe' => true
    ));
}

谢谢你的回答。你能更详细地解释一下为什么不推荐手动解析吗?非标准JSON字符串意味着你必须使用非标准的方式来解析它(如上所述),这意味着不必要的代码,这使它更难理解和维护。你可以有异常,但处理非标准JSON对我来说似乎不是一个值得的异常。为什么你有一个非标准JSON响应?你不能重构它吗?或者,如果它不在你的控制范围内,你能保证它在将来不会被修复吗因为如果是,上面的代码将被破坏。我相信我已经注意到了为什么它是非标准JSON字符串的问题。根据输入时间的不同,如果超过10分钟没有输入,将出现一个新的括号。如图所示:我知道这不是问题的一部分,但您能否提供一些关于如何替换JSON字符串的见解或文档[用逗号?我想如果我能修剪一下][并添加一个逗号,无论何时输入一个条目,它都将成为标准JSON字符串。谁在生成JSON?当然不是活动监视器…我不知道应该阅读哪些文档来为您指出正确的方向。woobox,他们建议在每个JSON字符串之间添加一行新行。我实际上做了一个str_替换在这里看到:但是我仍然会出错