从Mandrill Webhook接收到无效的JSON字符串


Invalid JSON String Received from Mandrill Webhook

从Mandrill接收的JSON字符串:

[{"event":"hard_boze","_id":"5760ab83b1b4e358f10cfe759440dce","msg":{"ts":1426810207,"_id":"5740ab83b4e385f10cfe 759440de","state":"反弹","subject":"鸡尾酒会","email":"XXXXXX@XXX.com.XX","tags":[],"smtp_events":]],"重新发送":[]","_version":"Nes5DEa8tOq5Z6m_b9AWIA","diag":"smtp;501 5.1.3邮箱地址语法错误"XXXXXX@XXX.com.XX"(不可打印字符)","bgtools_code":10,"sender":"info-noreply@inviter.com","template":null,"bounce_description":"bad_mailbox"},"ts":1426822720}]

更新:

这是从mandrill收到的又一个无效字符串

[{"event":"hard_boze","_id":"cddb25d2023a486a89454d5c6cefc4c9","msg":{"ts":1427904051,"_id":"CDdb25d22023a486a189454d5c6Cefc4c7","state":"反弹","subject":"周年纪念鸡尾酒会","email":"XXXXX@XXX.com","tags":[],"smtp_events":]],"重新发送":[]、"_version":"CvawLhm-1KO4OY_FsZ3uSA","diag":"smtp;550此处没有此类用户","bgtools_code":10,"sender":"info-noreply@inviter.com","template":null,"bounce_description":"bad_mailbox"},"ts":1427935354}]

预期的JSON字符串:

[
    {
        "event": "hard_bounce",
        "_id": "5760ab383b1b4e358f10cfe759440dce",
        "msg": {
            "ts": 1426810207,
            "_id": "5760ab383b1b4e358f10cfe759440dce",
            "state": "bounced",
            "subject": "Cocktail Party",
            "email": "XXXXXX@XXX.com.XX",
            "tags": [],
            "smtp_events": [],
            "resends": [],
            "_version": "Nes5DEa8tOq5Z6m_b9AWIA",
            "diag": "smtp;501 5.1.3 Syntax error in mailbox address 'XXXXXX@XXX.com.XX' (non-printable character)",
            "bgtools_code": 10,
            "sender": "info-noreply@inviter.com",
            "template": null,
            "bounce_description": "bad_mailbox"
        },
        "ts": 1426822720
    }
]

验证JSON字符串PHP代码:

function validateMandrillJSONString($JSONString){
    $JSONString = json_decode($JSONString);
    if(is_array($JSONString)){
        if(empty($JSONString)){
            return FALSE;
        }
        else{
            return TRUE;
        }
    }
    else{
        return FALSE;
    }
}

问题:当我将Received JSON字符串发送到上面的PHP函数时,它会返回FALSE。然后我发现带有双引号的JSON字符串中存在问题("diag":"smtp;501 5.1.3邮箱地址语法错误"XXXXXX@XXX.com.XX"(不可打印字符)")。

不仅仅是上面的字符串。我还有几个类似的字符串。例如,当用户在主题中引用双引号时,比如(嗨,"Madhu",你好吗?)我也得到了同样的错误。

这是山竹的虫子还是我这边的虫子。如果是在我这边,我该怎么解决?

提前谢谢。

我可以这么说,这个bug来自于它自己。我从mandrill获得无效的JSON。键"diag"的值中包含双引号的主要问题。

这是我使用字符串替换的临时修复。

//Data received from mandrill
$queueData = '[{"event":"hard_bounce","_id":"5760ab383b1b4e358f10cfe759440dce","msg":{"ts":1426810207,"_id":"5760ab383b1b4e358f10cfe759440dce","state":"bounced","subject":"Cocktail Party","email":"XXXXXX@XXX.com.XX","tags":[],"smtp_events":[],"resends":[],"_version":"Nes5DEa8tOq5Z6m_b9AWIA","diag":"smtp;501 5.1.3 Syntax error in mailbox address "XXXXXX@XXX.com.XX" (non-printable character)","bgtools_code":10,"sender":"info-noreply@inviter.com","template":null,"bounce_description":"bad_mailbox"},"ts":1426822720}]';
$queueData = str_replace(':""',':"""',$queueData); // Temp Fix
$queueData = str_replace('""','"',$queueData); // Temp Fix

欢迎提出任何建议

谢谢。