【问题标题】:How to get an API response如何获取 API 响应
【发布时间】:2017-08-14 07:37:43
【问题描述】:

我有这样的回应:

{
    "Contratos": [
        {
            "IdCUPS": 0,
            "CodigoCUPS": "",
            "IdContrato": 0,
            "CodigoContrato": null,
            "IdCliente": 0,
            "IdDocumento": null,
            "IdEmpresa": null,
            "Incidencias": [
                {
                    "Propiedad": "CodigoCUPS",
                    "Code": 0,
                    "CodeAlfa": "",
                    "Mensaje": "El cups ya esta asignado a contratos activos",
                    "IsAdvertencia": false,
                    "IsError": true,
                    "IsExcepcion": false,
                    "ExceptionTimestamp": "0001-01-01T00:00:00",
                    "ExceptionMessage": "",
                    "ExceptionStackTrace": "",
                    "InnerException": "",
                    "ImageSource": ""
                }
            ]
        }
    ]
}

如何访问“Mensaje”选项? 我有这段代码,我在其中制作 curl_init 及其选项:

$ch = curl_init($url.$contratoPotencial);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data_json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);

我尝试使用此代码:

echo "<br><br> Mensaje: ";
echo "<br>".$response->Contratos->Incidencias->Mensaje;

但它不起作用!

【问题讨论】:

  • 为什么该代码有任何工作的希望?阅读the manual on how arrays work。另请注意,Incidencias 是一个常规数组,因此您需要引用元素 0,而不仅仅是跳过它,就好像它不存在一样。
  • 尝试单步调试并查看您实际使用的内容,var_dump($response) 等。您混合了对象和数组,并且使用它们的语法各不相同(您尝试使用每个子项作为对象)
  • 试试$data = json_decode($response);

标签: php api curl


【解决方案1】:

您在 json 中混合了数组和对象:尝试以下解决方案:

$response = '{
    "Contratos": [
        {
            "IdCUPS": 0,
            "CodigoCUPS": "",
            "IdContrato": 0,
            "CodigoContrato": null,
            "IdCliente": 0,
            "IdDocumento": null,
            "IdEmpresa": null,
            "Incidencias": [
                {
                    "Propiedad": "CodigoCUPS",
                    "Code": 0,
                    "CodeAlfa": "",
                    "Mensaje": "El cups ya esta asignado a contratos activos",
                    "IsAdvertencia": false,
                    "IsError": true,
                    "IsExcepcion": false,
                    "ExceptionTimestamp": "0001-01-01T00:00:00",
                    "ExceptionMessage": "",
                    "ExceptionStackTrace": "",
                    "InnerException": "",
                    "ImageSource": ""
                }
            ]
        }
    ]
}';

$responseData = json_decode($response);
echo "<br><br> Mensaje: ";
echo "<br>".$responseData->Contratos[0]->Incidencias[0]->Mensaje;

输出

Mensaje: 
El cups ya esta asignado a contratos activos

将完整的json编码成如下数组:

$responseData = json_decode($response, true);
echo "<br><br> Mensaje: ";
echo "<br>".$responseData['Contratos'][0]['Incidencias'][0]['Mensaje'];

在这两种情况下,你都会得到想要的输出

【讨论】:

    【解决方案2】:

    像下面那样做一个 json_decode

    $respData = json_decode($response, true);
    

    然后打印

    echo $respData['Contratos']['Incidencias']['Mensaje'];
    

    【讨论】:

      猜你喜欢
      • 2019-12-29
      • 2017-09-07
      • 1970-01-01
      • 2020-06-25
      • 2019-04-25
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      相关资源
      最近更新 更多