假设我有一个服务器端脚本,它通过表上的简单选择生成JSON。 JSON在第一个脚本中编码。
我无法控制第一个脚本,但是我知道底层数据库结构何时发生更改以及JSON结构何时发生更改。
脚本2使用CURL获取包含JSON的.js
文件(内容),然后我可以将其解码为数组。
我需要做的是将数据存储在另一个数据库中。
我的问题基本上是关于自动化这个过程,并且当你不知道数组的结构到达时,能够从数组创建一个表。
可以吗?
编辑添加了当前的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}]}
答案 0 :(得分:4)
创建mysql表并从任何JSON变量插入值的简单代码片段。这是一个快速的黑客..检查字段类型等:)可能有更好的方法,但这一个工作,已经节省了我手动字段命名的时间
可以修改此项以创建处理对象的关系表。现在,它是由数组形成的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;
}
?>
答案 1 :(得分:1)
我会在问题旁边回答,但如果你想存储JSON,为什么不使用文档数据库呢? CouchDB沙发“按原样”存储您的JSON,无需您进行任何处理。
答案 2 :(得分:0)
获得JSON后,您可以使用PHP的json_decode函数将JSON转换为标准PHP对象。 http://php.net/manual/en/function.json-decode.php
然后,您可以通过使用foreach循环新创建的对象来构建SQL查询字符串。 http://php.net/manual/en/control-structures.foreach.php
当您遍历对象时,您可能必须进行类型检查以确保为数据库创建正确类型的字段。例如,使用PHP的is_numeric函数来确保将该字段设置为数字而不是varchar。但那取决于你在那里做什么。你可以让它翻录并使所有字段变成varchar。
您也可以按原样存储JSON对象,但我不知道您是否只需要存档数据,或者是否需要它来进行搜索和报告。如果您确实需要搜索/报告,那么您将不得不进行某种转换。或者做RageZ所说的并放入Couch数据库。还有其他一些选择,比如MongoDB。 http://www.mongodb.org/但是如果你没有时间学习和安装No-SQL数据库,那么我会坚持转换。