Mysql
 sql >> база данни >  >> RDS >> Mysql

Разбор на JSON данни и вмъкване в MySQL

  1. Не преобразувайте json в асоциативен масив сляпо. Това създава повече проблеми.
  2. За достъп до свойства, съдържащи специални знаци или запазени думи, използвайте заместители като $data->{'$ts'}
  3. Прегледайте масиви и обекти, ако е необходимо.
  4. Добавяне на автоматично увеличение id колона към таблици помага да се съхраняват данни за едно устройство.
  5. Добра идея е да добавите time към error_log също и маса

Тестван по-долу кратка версия на оригиналния ви въпрос и работи.

<?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. Стойностите за географска ширина и дължина се запазват като низове или числа?

  2. C#/NHibernate - Вземете първите 10 записа, подредени по групирана сума

  3. Най-добрият начин да съхранявате име на категория от php в таблица на mysql

  4. JSON и качете изображение на сървъра

  5. Създайте MySQL потребител на Linux чрез командния ред