使用多维数组将JSON数据存档到SQL数据库

时间:2017-05-02 16:17:54

标签: php mysql json multidimensional-array

我正在编写一个使用CURL从API获取JSON数据的脚本。在查看如何将数据从JSON存储到数据库本身时,我遇到了一个有点令人困惑的地方。

该表显示了JSON密钥和相应的SQL列标题。

----------------------------
| JSON    | MySQL          |
----------------------------
| name    | name           |
| street  | address_line_1 |
| city    | city           |
| country | country        |
| zip     | postcode       |
| id      | api_id         |
----------------------------

返回了几个不同的JSON数据树,其中键名与数据库中的名称完全无关,因此不可能将SQL标题与键匹配。

假设我已经在返回的JSON上获取并运行了JSON_DECODE。

$json[0] = (
    ['name'] => 'Venue Name',
    ['street'] => 'Street Name',
    ['city'] => 'City',
    ['country'] => 'United Kingdom',
    ['zip'] => 'NE123ER',
    ['id'] => 'API Identifier'
);

并且我已经成功使用以下代码输出所有项目(返回的一些数据是嵌套的,例如在这种情况下)。

foreach($json as $event)
{
    $iter = new RecursiveArrayIterator($event);
    foreach(new RecursiveIteratorIterator($iter) as $key => $value) {
        if($iter->hasChildren())
        {
            if($key === 'id'){

            } elseif($key === 'name'){

            } elseif($key === 'street'){

            } elseif($key === 'city'){

            } elseif($key === 'country'){

            } elseif($key === 'zip'){

            }
        }
    }
}

我知道我基本上需要得到一个结果数组,然后我就可以写入MySQL数据库了。

$mysql_write[0] = (
    ['name'] => 'Venue Name',
    ['address_line'] => 'Street Name',
    ['city'] => 'City',
    ['country'] => 'United Kingdom',
    ['postcode'] => 'NE123ER',
    ['api_id'] => 'API Identifier'
);

但我无法弄清楚如何更改钥匙。一个想法是创建一个转换树类型的东西,它们的键将是当前目标,并且在写入新数组进行SQL编写时将使用该值。

$venue_tree = array(
    array('name' => 'name'),
    array('street' => 'address_line_1'),
    array('city' => 'city'),
    array('country' => 'country'),
    array('zip' => 'postcode'),
    array('id' => 'facebook_id')
);

但此时我已经迷茫了。这对任何人都有意义吗?

1 个答案:

答案 0 :(得分:0)

您是否期望这样,将键映射到其他键。

Try this code snippet here

<?php

ini_set('display_errors', 1);
$json = array(
    'name' => 'Venue Name',
    'street' => 'Street Name',
    'city' => 'City',
    'country' => 'United Kingdom',
    'zip' => 'NE123ER',
    'id' => 'API Identifier'
);
$venue_tree = array(
    'name' => 'name',
    'street' => 'address_line_1',
    'city' => 'city',
    'country' => 'country',
    'zip' => 'postcode',
    'id' => 'facebook_id');
$result=array();
foreach($venue_tree as $key => $changedKey)
{
    $result[$changedKey]=$json[$key];
}
print_r($result);

<强>输出:

Array
(
    [name] => Venue Name
    [address_line_1] => Street Name
    [city] => City
    [country] => United Kingdom
    [postcode] => NE123ER
    [facebook_id] => API Identifier
)