У меня есть этот огромный файл JSON. В настоящее время способ, которым я использую его:
Проблема, код ужасен. Кроме того, некоторые объекты в этих массивах являются самостоятельно массивами, и не все записи содержат все значения. Я должен использовать isset, чтобы проверить, присутствует ли конкретное значение, или используйте значение по умолчанию и т.д. В целом, это работает правильно, но код ужасен. Есть ли какой-либо способ, которым я могу записать это лучше?
Если вы не хотите писать уродливый код для генерации SQL-запросов, подумайте об использовании ORM Propel и doctrine - это те, которые я лично использовал.
В доктрине есть метод для создания объекта из массива и последующего простого вызова для него метода сохранения.
взгляните на этот http://www.doctrine-project.org/documentation/manual/1_0/en/working-with-models:arrays-and-objects:from- array
Трудно посоветовать, не глядя на код, но хотелось бы напомнить об операторе PHP + для массивов, который неразрушающе объединяет два массива.
$default_values = array('Name' => '', 'Email' => '', 'Meta' => '');
$data = array('Name' => 'John'); // Only name set
$fixed_data = $data + $default_values;
$fixed_data
теперь выглядит как array('Name' => 'John', 'Email' => '', 'Meta' => ');
без необходимости многократной проверки isset(). (Может быть неприменимо к вашему случаю, трудно сказать без дополнительной информации)
Красота в глазах смотрящего.
Если формат JSON находится за пределами вашего контроля, то есть не так много, что вы можете сделать, за исключением перещиты кусочков вокруг доски. Сделайте обычную вещь для создания ваших функций как можно маленькую и аккуратно, вместо того, чтобы иметь один большой блок кода. Несколько функций будет легче читать и более многоразоваться.
Я склонен вызывать этот процесс функциональное разложение .
Конечно, вы также можете взять подход OO и создать несколько приятных объектов, которые сохраняют себя в базе данных и строят от кусочков объекта JSON, но это в основном то же самое (за исключением того, что он делает пуристы OO лучше ночью ).
Большинство баз данных (MySQL, sqlite и т.д.) предпочитают работать с форматом данных XML импорту/экспорту данных .
Вы можете преобразовать JSON-объект в XML, а затем работать с ним.
Не удивительно, что в ближайшем будущем я увижу базы данных, поддерживающие JSON, но пока это, наверное, самое лучшее, что можно сделать.
Если вы используете красивую абстракцию базы данных, такую как ADODb, то вам понадобится больше создавать запрос на вставку.
Это пример вставки с использованием ADODb:
$data['col1'] = 'value1';
$data['col2'] = 'value2';
$data['col3'] = 'value3';
$result = $adodb->AutoExecute($tablename, $data, 'INSERT');
Так как результат работы json_encode
уже представляет собой массив , то он идеально подходит. Если определение столбца в базе данных допускает
null
, то отсутствующий столбец в $data
все равно будет корректной вставкой.