我正在编写一个使用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')
);
但此时我已经迷茫了。这对任何人都有意义吗?
答案 0 :(得分:0)
您是否期望这样,将键映射到其他键。
<?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
)