Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Parsowanie danych JSON i wstawianie do MySQL

  1. Nie konwertuj na ślepo json na tablicę asocjacyjną. Stwarza więcej problemów.
  2. Aby uzyskać dostęp do właściwości zawierających znaki specjalne lub słowa zastrzeżone, użyj symboli zastępczych, takich jak $data->{'$ts'}
  3. W razie potrzeby przeprowadź pętlę przez tablice i obiekty.
  4. Dodawanie automatycznego przyrostu id kolumna do tabel pomaga przechowywać dane dla jednego urządzenia.
  5. Dobrym pomysłem jest dodanie time do error_log stół również

Przetestowano poniżej krótką wersję Twojego oryginalnego pytania i działa.

<?php
        $_user = 'root';
        $_password= 'root';
        $_db = 'localtest';
        $_host = 'localhost';
        $_port = 3306;
    $con = new mysqli($_host, $_user, $_password, $_db) or die(mysql_error);

    //read the json file contents
    $jsondata = file_get_contents('test.json');

    //do not convert to array
    $json = json_decode($jsondata);

    $id = $json->device->sn;
    foreach($json->data as $key => $data){
        if(empty($data) || !isset($data->{'$ts'})){
            continue;
        }
        if (isset($data->{'$msg'})){
            $msg = $data->{'$msg'};
            $time = $data->{'$ts'};

            $sql="INSERT into error_log (sn, time, MSG) VALUES (?,?,?); ";
            $stmt = $con-> prepare($sql);
            $stmt -> bind_param("iss", $id,$time, $msg);
            $stmt -> execute();
        }else{
            $time = (isset($data->{'$ts'}))? $data->{'$ts'}:'';
            $RH = (isset($data->RH))? $data->RH:'';
            $AT = (isset($data->AT))? $data->AT:'';
            $MINVi = (isset($data->MINVi))? $data->MINVi:'';

            //insert into mysql table
            $sql="INSERT into test (sn, date, RH, AT, MINVi) VALUES (?,?,?,?,?); ";
            $stmt = $con-> prepare($sql);
            $stmt -> bind_param("issss", $id,$time,$RH,$AT,$MINVi);
            $stmt -> execute();
        }


    }
    mysqli_close($con);

?>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapobiegaj wstawianiu daty i godziny do bazy danych

  2. Z wyłączeniem rekordów, w których podzapytanie zwraca wyniki, które muszą się wzajemnie wykluczać

  3. Używanie klauzuli IN w MySQL z określonymi wartościami

  4. MySQL — dołączanie na podstawie daty

  5. SQL — Usuń nawias z numeru telefonu