将JSON转换为关系数据库格式表(带有重复值)PHP

时间:2017-08-08 13:25:37

标签: php json

我确定该操作有正确的名称,但我无法找到它。 好吧,我正在寻找的是一个PHP函数来转换JSON数据(解码为关联数组),如下所示:

{
    "id": 768570754,
    "status": "paid",
    "status_detail": null,
    "date_created": "2013-05-27T10:01:50.000-04:00",
    "date_closed": "2013-05-27T10:04:07.000-04:00",
    "order_items": [{
        "item": {
            "id": "MLB12345678",
            "title": "Samsung Galaxy",
            "variation_id": null,
            "variation_attributes": []
        },
        "quantity": 1,
        "unit_price": 499,
        "currency_id": "BRL"
    }]
}

使用包含这些列的表格式,如果其子项中存在多行,则某些数据可能会重复:

id | status | status_detail | date_created | date_closed | item_id | item_title | item_variation_id | quantity | unit_price

我希望将此作为适合任何JSON数据的标准过程,无论是否找到嵌套数组。

PHP中是否有预构建函数来处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

存储这是我想出的:

你需要一张具有以下结构的桌子

VARCHAR (id)
VARCHAR (key)
VARCHAR (value)

我把它命名为'productmeta',但没关系。

然后您应该能够通过调用storeDataset(DATA);来存储具有以下代码的任意数据集

function storeDataset($data){
    if(!isset($data['id'])){ // check for id
        throw new Exception('Missing ID field from dataset');
        return;
    }
    // extract id
    $id = $data['id'];
    unset($data['id']);

    // get key value pairs recursively
    $pairs = getKeyValPairs($data,'');

    $sql_parts = array();
    for($i=0;$i<count($pairs);$i++){
        $key = $pairs[$i]['key'];
        $value = $pairs[$i]['value'];
        $sql_parts[] = "($id, '$key', '$value')";
    }

    $sql_data = implode(',', $sql_parts);

    $sql = 'INSERT INTO productmeta (`id`,`key`,`value`) VALUES '.$sql_data;

    // TODO: execute $sql

}

function getKeyValPairs($arr,$level){
    $pairs = array();
    foreach ($arr as $key => $value) {
        if(is_array($value))
            $pairs = array_merge($pairs,getKeyValPairs($value,$level.$key.'.'));
        else
            $pairs[] = array('key'=>$level.$key,'value'=>$value);
    }
    return $pairs;
}

目前正试图对阅读部分进行编码......