Как разобрать этот json получая в ответ - PullRequest
0 голосов
/ 12 сентября 2018

я знаю, что это недопустимый json, но я получаю этот json в ответ на команду creditswitch api. Я не могу изменить этот ответ, но я хочу проанализировать этот json
, когда я заменяю этот просто ключ данных, например

desired json response
{
    "statusCode": "00",
    "statusDescription": {
        "customerNo": 283375350,
        "accountStatus": "OPEN",
        "firstname": "ADVENTURE",
        "lastname": "MOBILE",
        "customerType": "SUD",
        "invoicePeriod": 1,
        "dueDate": "2018-09-29T00:00:00+01:00"
    }
}

я получаю действительный json, но как удалить эту первую часть json, я не знаю никакого решения по нему, вот исходный json, который я получаю.

this is the original json response
{
    "details": {
        "number": "10553886499",
        "requestType": "VALIDATE_DEVICE_NUMBER"
    },
    "serviceId": "AQA"
} 
{
    "statusCode": "00",
    "statusDescription": {
        "customerNo": 283375350,
        "accountStatus": "OPEN",
        "firstname": "ADVENTURE",
        "lastname": "MOBILE",
        "customerType": "SUD",
        "invoicePeriod": 1,
        "dueDate": "2018-09-29T00:00:00+01:00"
    }
}

1 Ответ

0 голосов
/ 12 сентября 2018

Итак, очевидно, что этот API выводит два объекта json за раз, что не является стандартным, и сбивает с толку php json декодер. Я думаю, что вы могли бы сделать что-то умное с preg_match для разделения, хотя это довольно сложно с подпоследовательностями. Я создал эту небольшую процедуру, которая, кажется, работает для разделения их на части, которые можно декодировать

$input=<<<DAT
{
    "details": {
        "number": "10553886499",
        "requestType": "VALIDATE_DEVICE_NUMBER"
    },
    "serviceId": "AQA"
} 
{
    "statusCode": "00",
    "statusDescription": {
        "customerNo": 283375350,
        "accountStatus": "OPEN",
        "firstname": "ADVENTURE",
        "lastname": "MOBILE",
        "customerType": "SUD",
        "invoicePeriod": 1,
        "dueDate": "2018-09-29T00:00:00+01:00"
    }
}
DAT;

$cur_json='';
$requests=[];
$inbrace=false;
$inquotes=false;
$inescape=false;
$bracecnt=0;
for($i=0;$i<mb_strlen($input);$i++){
    $c=mb_substr($input,$i,1);
    switch($c){
        case '{':
            if(!$inbrace)
                $inbrace=true;
            $bracecnt++;
            $cur_json.=$c;
            break;
        case '}':
            if($inquotes)
                $cur_json.=$c;
            else{
                $bracecnt--;
                $cur_json.=$c;
                if($bracecnt==0)
                {
                    $inbrace=false;
                    $requests[]=$cur_json;
                    $cur_json='';
                }
            }
            break;
        case '"':
            $cur_json.=$c;
            if(!$inescape&&$inquotes)
                $inquotes=false;
            else
                $inquotes=true;
            break;
        case '\\':
            $cur_json.=$c;
            if(!$inescape)
                $inescape=true;
            else
                $inescape=false;
            break;
        default:
            $cur_json.=$c;
            break;
    }
}
$requests[]=$cur_json;

echo '<pre>';
var_dump(json_decode($requests[0]));
var_dump(json_decode($requests[1]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...