解析请求,PHP / Laravel

问题描述

访问控制设备使用此API来报告人员通过记录,在我(第三方平台)之后,我将该API称为面部识别终端或面部识别访问控制终端。

呼叫方向:

面部识别终端或面部识别访问控制终端将API调用到第三方平台。

请求说明:

请求方法:POST 请求网址:/LAPI/V1.0/System/Event/Notification/PersonVerification 内容类型:文本/纯文本

请求示例:

{
    "Reference": "204.2.1.20:5118/LAPI/V1.0/System/Event/Subscription/0","Seq": 5,"DeviceCode": "210235C3R13202000093","Timestamp": 1564735558,"NotificationType": 1,"FaceInfoNum": 1,"FaceInfoList": [
        {
            "ID": 5,"Timestamp": 1564707615,"CapSrc": 1,"FeatureNum": 0,"FeatureList": [
                {
                    "Featureversion": "","Feature": ""
                },{
                    "Featureversion": "","Feature": ""
                }
            ],“Temperature”: 36.5,“MaskFlag”: 1,"PanoImage": {
                "Name": "1564707615_1_86.jpg","Size": 101780,"Data": "…"
            },"FaceImage": {
                "Name": "1564707615_2_86.jpg","Size": 35528,"FaceArea": {
                "LeftTopX": 4981,"LeftTopY": 3744,"RightBottomX": 8250,"RightBottomY": 5583
            }
        }
    ],"CardInfoNum": 0,"CardInfoList": [ ],"GateInfoNum": 0,"GateInfoList": [ ],"libmatInfoNum": 1,"libmatInfoList": [
        {
            "ID": 5,"LibID": 3,"LibType": 4,"MatchStatus": 2,"MatchPersonID": 0,"MatchFaceID": 0,"MatchPersonInfo": {
                "PersonName": "","Gender": 0,"CardID": "","IdentityNo": ""
            }
        }
    ]
}

我正在使用Laravel,在尝试$ request-> all()时得到了[],下面是我dump( $request->getContent() );时得到的 dump

似乎我需要从请求的开头和结尾删除""才能转换为json_decode(),但是无论我使用什么字符串函数-preg_replace,substring等-当我尝试$ content时都没有任何改变[0]我得到{而不是",$ content [-1]我得到\n,$ content [-2]我得到}

有人可以指出我犯了错吗?

解决方法

看起来是Content-Type标头问题。但这应该是一个适当的解决方案:

  $find = ['/"""/','/\\\n/','/“/','/”/'];
  $replace = ['','','"','"'];

  $output = preg_replace($find,$replace,$your_input);

  // now the $output is ready to be decoded
  $decoded = json_decode($output);
  $v = var_dump($decoded); 

有关实际实现,请参见此Repl:Json Parse