sql >> Databasteknik >  >> RDS >> Mysql

Parsar JSON-data och infogar till MySQL

  1. Konvertera inte json till associativ array blint. Det skapar fler problem.
  2. För att komma åt egenskaper som innehåller specialtecken eller reserverade ord, använd platshållare som $data->{'$ts'}
  3. Slinga genom arrayer och objekt om det behövs.
  4. Lägga till en automatisk ökning av id kolumn till tabeller hjälper till att lagra data för en enhet.
  5. Det är en bra idé att lägga till time till error_log tabell också

Testade nedan korta version av din ursprungliga fråga och det fungerar.

<?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. MySQL Connector för C++ | MySQL_Connection::setReadOnly() undantag på setSchema

  2. Foreach or For – Det är frågan

  3. Flera och enkla index

  4. Skillnaden mellan multi-statement tabell-värderade funktioner och inline tabell-värderade funktioner i SQL Server