Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Phân tích cú pháp dữ liệu JSON và chèn vào MySQL

  1. Không chuyển đổi json sang mảng kết hợp một cách mù quáng. Nó tạo ra nhiều vấn đề hơn.
  2. Để truy cập các thuộc tính có chứa các ký tự đặc biệt hoặc từ dành riêng, hãy sử dụng các trình giữ chỗ như $data->{'$ts'}
  3. Lặp qua các mảng và đối tượng nếu cần.
  4. Thêm id tăng tự động cột thành bảng giúp lưu trữ dữ liệu cho một thiết bị.
  5. Bạn nên thêm time tới error_log bảng cũng vậy

Đã kiểm tra phiên bản ngắn dưới đây của câu hỏi ban đầu của bạn và nó hoạt động.

<?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. LỖI 1396 (HY000):Thao tác CREATE USER không thành công cho 'jack' @ 'localhost'

  2. Định dạng hàng MySQL:Sự khác biệt giữa cố định và động?

  3. Chọn * từ table1 không tồn tại trong table2 với điều kiện

  4. MySQL:Tách một bảng lớn thành các phân vùng hay các bảng riêng biệt?

  5. MySQL - Danh sách kéo tùy thuộc vào ngày tháng và danh mục