что лучший способ состоит в том, чтобы проанализировать большой файл JSON и вставить в базу данных с помощью php?

У меня есть этот огромный файл JSON. В настоящее время способ, которым я использую его:

  1. Считайте все содержание в строку
  2. Сделайте json_decode, получите массив
  3. Цикл через массив одна запись за один раз и сборка мой SQL вставляет оператор

Проблема, код ужасен. Кроме того, некоторые объекты в этих массивах являются самостоятельно массивами, и не все записи содержат все значения. Я должен использовать isset, чтобы проверить, присутствует ли конкретное значение, или используйте значение по умолчанию и т.д. В целом, это работает правильно, но код ужасен. Есть ли какой-либо способ, которым я могу записать это лучше?

7
задан user61734 2 February 2010 в 10:46
поделиться

5 ответов

Если вы не хотите писать уродливый код для генерации SQL-запросов, подумайте об использовании ORM Propel и doctrine - это те, которые я лично использовал.

В доктрине есть метод для создания объекта из массива и последующего простого вызова для него метода сохранения.

взгляните на этот http://www.doctrine-project.org/documentation/manual/1_0/en/working-with-models:arrays-and-objects:from- array

1
ответ дан 7 December 2019 в 16:42
поделиться

Трудно посоветовать, не глядя на код, но хотелось бы напомнить об операторе 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(). (Может быть неприменимо к вашему случаю, трудно сказать без дополнительной информации)

.
2
ответ дан 7 December 2019 в 16:42
поделиться

Красота в глазах смотрящего.

Если формат JSON находится за пределами вашего контроля, то есть не так много, что вы можете сделать, за исключением перещиты кусочков вокруг доски. Сделайте обычную вещь для создания ваших функций как можно маленькую и аккуратно, вместо того, чтобы иметь один большой блок кода. Несколько функций будет легче читать и более многоразоваться.

Я склонен вызывать этот процесс функциональное разложение .

Конечно, вы также можете взять подход OO и создать несколько приятных объектов, которые сохраняют себя в базе данных и строят от кусочков объекта JSON, но это в основном то же самое (за исключением того, что он делает пуристы OO лучше ночью ).

0
ответ дан 7 December 2019 в 16:42
поделиться

Большинство баз данных (MySQL, sqlite и т.д.) предпочитают работать с форматом данных XML импорту/экспорту данных .

Вы можете преобразовать JSON-объект в XML, а затем работать с ним.

Не удивительно, что в ближайшем будущем я увижу базы данных, поддерживающие JSON, но пока это, наверное, самое лучшее, что можно сделать.

0
ответ дан 7 December 2019 в 16:42
поделиться

Если вы используете красивую абстракцию базы данных, такую как ADODb, то вам понадобится больше создавать запрос на вставку.

Это пример вставки с использованием ADODb:

$data['col1'] = 'value1';
$data['col2'] = 'value2';
$data['col3'] = 'value3';

$result = $adodb->AutoExecute($tablename, $data, 'INSERT');

Так как результат работы json_encode уже представляет собой массив , то он идеально подходит. Если определение столбца в базе данных допускает null, то отсутствующий столбец в $data все равно будет корректной вставкой.

0
ответ дан 7 December 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: