搜尋

首頁  >  問答  >  主體

MySQL 8.0的SQL查詢JSON傳回的資料類型為字串而非陣列

<p>我在MySQL 8.0中建立了一個表,如下所示:</p> <pre class="brush:php;toolbar:false;">CREATE TABLE `airline_table` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `info` json DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;</pre> <p>它包含了JSON類型的數據,我插入了一些數據,如下:</p> <pre class="brush:php;toolbar:false;">INSERT INTO airline_table VALUES ('1','{"data": [{"city": "Houston", "state" "TX"}, {"city": "Los Angles", "state": "CA"}], "airline": ["UA", "AA"]}'): ["UA", "AA"]}'));&; <p>我使用php存取資料庫,希望將"airline"的值作為一個陣列獲取。 </p> <pre class="brush:php;toolbar:false;"><?php $mysqli = new mysqli("localhost", "root", "aproot2019", "test"); $sql = "SELECT id, info -> '$.airline' AS airline FROM airline_table"; $result = $mysqli->query($sql); $row = $result->fetch_array(); //print_r($row); $airline = $row['airline']; echo $airline . "<br>"; // ["UA", "AA"] , 這是一個字串而不是一個數組,我怎麼才能得到一個數組呢? echo is_array($airline) ? 'Array' : 'not an Array' . "<br>"; // 不是一個陣列 echo is_string($airline) ? 'String' : 'not a String' . "<br>" ; // 字串 $mysqli->close(); ?></pre> <p>但是它輸出的是一個字串,而不是一個陣列! 這真的很煩人,MySQL中的JSON很難理解。 </p>
P粉099985373P粉099985373459 天前624

全部回覆(1)我來回復

  • P粉253518620

    P粉2535186202023-08-29 14:31:58

    您是否考慮過解碼JSON?

    $json = json_decode('{"data": [{"city": "Houston", "state": "TX"}, {"city": "Los Angles", "state": "CA"}], "airline": ["UA", "AA"]}');
    
    // 对于您的情况,将是:
    // $json = json_decode($row['airline']);
    echo var_dump($json->airline);
    /**
     * array(2) {
      [0]=>
      string(2) "UA"
      [1]=>
      string(2) "AA"
    }
    
    

    回覆
    0
  • 取消回覆