sql >> Database teknologi >  >> RDS >> Mysql

Parsing af JSON-data og indsættelse i MySQL

  1. Konverter ikke json til associativ array blindt. Det skaber flere problemer.
  2. For at få adgang til egenskaber, der indeholder specialtegn eller reserverede ord, skal du bruge pladsholdere som $data->{'$ts'}
  3. Sløjfe gennem arrays og objekter, hvis det er nødvendigt.
  4. Tilføjelse af et automatisk id kolonne til tabeller hjælper med at gemme data for én enhed.
  5. Det er en god idé at tilføje time til error_log også bordet

Testet nedenstående kort version af dit originale spørgsmål, og det virker.

<?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. Sådan fungerer UPDATEXML() i MariaDB

  2. Hæver barren på MySQL, MariaDB, PostgreSQL og MongoDB Management

  3. Hvordan gemmer man dato-tid i UTC i en database ved hjælp af EclipseLink og Joda-Time?

  4. Tilføjelse af kun én værdi til tabellen i sql