Предположим, у меня есть сценарий на стороне сервера, который генерирует JSON из простого выбора в таблице. JSON кодируется в первом скрипте.
Я не контролирую этот 1-й скрипт, но знаю, когда изменяется базовая структура базы данных и изменяется структура JSON.
Script 2 использует CURL для получения .js
файла (содержимого), который содержит JSON, затем я могу декодировать его в массив.
Тогда мне нужно сохранить данные в другой базе данных.
Мой вопрос в основном связан с автоматизацией этого процесса и возможностью создания таблицы из массива, когда вы не знаете, какова структура массива, пока он не появится.
Это можно сделать?
EDIT Добавил 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}]}
Я отвечу рядом с вопросом, но если вы хотите сохранить JSON, почему бы не использовать базу данных документов? Кушетка CouchDB хранит ваш JSON «как есть» без необходимости выполнять какую-либо обработку.
Простая часть кода для создания таблицы 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; } ?>
Как только вы получите JSON, вы можете использовать функцию json_decode PHP для преобразования JSON в стандартный PHP-объект. http://php.net/manual/en/function.json-decode.php
Затем вы можете построить свою строку запроса SQL, перейдя через только что созданный объект, используя foreach. http://php.net/manual/en/control-structures.foreach.php
Когда вы выполняете итерацию через свой объект, вам, вероятно, придется выполнять проверку типов, чтобы убедиться, что вы создаете правильный тип поля для базы данных. Например, используйте функцию is_numeric PHP, чтобы убедиться, что вы установите это поле как числовое, а не varchar. Но это зависит от вас, что делать. Вы могли бы просто позволить ему разорвать и сделать все поля varchar.
Вы также можете просто сохранить объект JSON как есть, но я не знаю, нужно ли вам просто архивировать данные или если вам это нужно для поиска и отчетности. Если вам нужно искать / сообщать об этом, вам нужно будет сделать какое-то преобразование. Или сделайте то, что сказал RageZ, и положил в базу данных Couch. Там также есть несколько других вариантов, таких как MongoDB. http://www.mongodb.org/ Но если у вас нет времени изучать и устанавливать базу данных без SQL, я бы придерживался конверсии.