【问题标题】:How can I access the json returned in PHP by my Web Api?如何访问我的 Web Api 在 PHP 中返回的 json?
【发布时间】:2021-11-22 15:21:28
【问题描述】:

我正在使用以下代码从我的 Web API 发送和检索数据

//data
    $data = array("Id_Empresa" => 1);


    try {
        $ch = curl_init($url);
        $data_string = json_encode($data);
    
        if (FALSE === $ch)
            throw new Exception('failed to initialize');
    
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)));
            curl_setopt($ch, CURLOPT_TIMEOUT, 5);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            $data = curl_exec($ch);
            var_dump($data);
            $json = json_decode($data);
            foreach ($json->msg as $item) {
                  echo "$item->Nombre, $item->Descripcion" . PHP_EOL;
            }
        // ...process $output now
    } catch(Exception $e) {
    
        trigger_error(sprintf(
            'Curl failed with error #%d: %s',
            $e->getCode(), $e->getMessage()),
            E_USER_ERROR);
    }

这是我得到的回应

{"ok":true,"msg":[{"Nombre":"Carnicerias","Descripcion":"Comercio al por menor de carnes rojas","H_Open":"01:00:00","H_Close":"02:00:00"}]}bool(true)

我正在尝试使用以下代码访问 JSON(因为它在类似的请求中对我有用):

$json = json_decode($data);
foreach ($json->msg as $item) {
    echo "$item->Nombre, $item->Descripcion" . PHP_EOL;
}

但正如您所见,变量 $data 不再是 JSON,而是变成了 bool(true)。

有谁知道我如何访问 JSON msj 或为什么 $data 变量从 JSON 更改为 bool?

【问题讨论】:

    标签: php json curl boolean


    【解决方案1】:

    curl_exec 的 PHP 手册的返回值部分说

    成功时返回 true,失败时返回 false。但是,如果设置了 CURLOPT_RETURNTRANSFER 选项,它将在成功时返回结果,在失败时返回 false。

    也许它可以更具体 - 该选项必须设置为true。请参阅curl_setopt 文档中的选项定义:

    true 将传输作为 curl_exec() 的返回值的字符串返回,而不是直接输出。

    所以,您看到 JSON 响应是因为它直接由 curl_exec 输出,然后是 bool(true) 因为 curl_exec 已将 true 返回到您正在转储的 $data 变量。

    CURLOPT_RETURNTRANSFER 设置为true 以获得您期望的结果。

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 2023-03-26
      • 1970-01-01
      • 2014-05-14
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多