什么是解析大JSON文件并使用php插入数据库的最佳方法?

时间:2010-02-02 10:46:43

标签: php mysql json

我有这个巨大的JSON文件。目前我使用它的方式是:

  1. 将整个内容读入字符串
  2. 执行json_decode,获取数组
  3. 一次遍历数组一条记录并构建我的SQL插入语句
  4. 问题是,代码很难看。此外,这些数组中的某些对象本身就是数组,并非所有记录都包含所有值。我必须使用isset检查是否存在特定值,或使用默认值等。总的来说,它工作正常,但代码很难看。有什么方法可以写得更好吗?

5 个答案:

答案 0 :(得分:2)

很难在不查看代码的情况下提出建议,但我想提醒一下有关数组的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()检查。 (可能不适用于您的情况,没有更多信息很难说。)

答案 1 :(得分:1)

如果您不想编写丑陋的代码来生成SQL查询,请考虑使用ORM Propel和doctrine是我个人使用过的。

doctrine有一个方法从数组生成一个对象,然后简单地在其上调用一个save方法。

看看这个 http://www.doctrine-project.org/documentation/manual/1_0/en/working-with-models:arrays-and-objects:from-array

答案 2 :(得分:0)

美丽在旁观者的眼中。

如果JSON的格式超出了您的控制范围,那么除了在棋盘周围进行随机播放之外,您无能为力。通常的做法是让你的功能尽可能小而整洁,而不是只有一大块代码。多功能将更容易阅读和更可重复使用。

我倾向于将此过程称为功能分解

当然你也可以采用OO方法并构建一些很好的对象,将自己保存到数据库并从JSON对象的部分构建自己,但这基本上是相同的(除了它使OO纯粹主义者在晚上睡得更好)。

答案 3 :(得分:0)

大多数数据库(MySQL,sqlite等)更喜欢使用XML数据格式import/export data

您可以将JSON对象转换为XML,然后使用它。

在不久的将来看到支持JSON的数据库我并不感到惊讶,但是现在这可能是最好的事情。

答案 4 :(得分:0)

如果您使用像ADODb这样漂亮的数据库抽象,那么您将需要构建插入查询。

这是使用ADODb插入的示例:

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

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

由于json_encode的结果已经是array,因此非常适合。如果数据库中的列定义允许null,则$data中缺少的列仍将是有效插入。