所以,很明显这个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]));