我可以从 JSON 动态创建 mySQL 表吗?

T9b*_*T9b 2 php mysql json dynamic create-table

假设我有一个服务器端脚本,它从一个表上的简单选择生成 JSON。JSON 编码在第一个脚本中。

我无法控制第一个脚本,但我知道底层数据库结构何时发生变化以及 JSON 结构何时发生变化。

脚本 2 使用 CURL 来获取.js包含 JSON的文件(内容),然后我可以解码为一个数组。

然后我需要做的是将数据存储在另一个数据库中。

我的问题基本上是关于自动化这个过程,并且当你在数组到达之前不知道数组的结构是什么时,能够从数组创建一个表。

可以做到吗?

编辑添加了目前的 JSON,但重点是它可能会改变。

{"name": "Google",
 "homepage_url": "http://www.google.com",
 "blog_url": "",
 "blog_feed_url": "",
 "twitter_username": "",
 "category_code": "ecommerce",
 "tag_list": "retail-portal-online-shopping-markets",
 "alias_list": null,
 "image": null,
 "products":
  [],
 "relationships":
  [],
 "competitions":
  [],
 "providerships":
  [{"title": "Legal",
    "is_past": false,
    "provider":
     {"name": "TaylorWessing",
      "permalink": "taylorwessing"}}],
 "offices":
  [{"description": "European HQ",
    "address1": "",
    "address2": "",
    "zip_code": "",
    "city": "Brussels",
    "state_code": null,
    "country_code": "BEL",
    "latitude": null,
    "longitude": null}]}
Run Code Online (Sandbox Code Playgroud)

K. *_*erg 5

用于创建 mysql 表并从任何 JSON 变量插入值的简单代码段。这是一个快速的 hack .. 检查字段类型等 :) 可能有更好的方法,但是这个方法有效并且已经为我节省了手动字段命名的时间

这也可以修改为创建一个关系表处理对象。现在,它是为数组形成的 JSON 内容而不是对象(即数组中的数组)制作的。

<?php

    JSON_to_table($place_your_JSON_var_here_please);

            function JSON_to_table($j_obj, $tblName = "New_JSON_table_" . time()){
            $j_obj = json_decode($your_JSON_variable, true);
            if(!mysql_num_rows( mysql_query("SHOW TABLES LIKE '" . $tblName . "'"))){ 
                $cq = "CREATE TABLE ". $tblName ." (
                id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,";
                foreach($j_obj as $j_arr_key => $value){
                    $cq .= $j_arr_key . " VARCHAR(256),";
                }
                $cq = substr_replace($cq,"",-1);
                $cq .= ")";
                mysql_query($cq) or die(mysql_error());
            }

            $qi = "INSERT INTO $tblName (";
            reset($j_obj);
                foreach($j_obj as $j_arr_key => $value){
                    $qi .= $j_arr_key . ",";
                }
                $qi = substr_replace($qi,"",-1);
            $qi .= ") VALUES (";
            reset($j_obj);
                foreach($j_obj as $j_arr_key => $value){
                    $qi .= "'" . mysql_real_escape_string($value) . "',";
                }
            $qi = substr_replace($qi,"",-1);
            $qi .= ")";
            $result = mysql_query($qi) or die(mysql_error());

        return true;
            }
?>
Run Code Online (Sandbox Code Playgroud)