Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP动态解析嵌套多维JSON数组_Php_Mysql_Json_Parsing_Multidimensional Array - Fatal编程技术网

PHP动态解析嵌套多维JSON数组

PHP动态解析嵌套多维JSON数组,php,mysql,json,parsing,multidimensional-array,Php,Mysql,Json,Parsing,Multidimensional Array,我的服务器上有多个JSON文件需要解析,然后将解析后的数据插入数据库。对于每个文件,我需要解析嵌套的“数据集”集合数组,该数组也包含多个嵌套数组,然后将多个嵌套数组中的数据插入到我的数据库中 每个文件都包含不同且不断变化的嵌套数据集,因此我试图编写一个脚本,该脚本将使用数组中的数据动态构建sql insert语句 示例JSON数据 { "title" : "Exported Data", "timestamp":"3/17/2017 10:35:13 PM", // I need the

我的服务器上有多个JSON文件需要解析,然后将解析后的数据插入数据库。对于每个文件,我需要解析嵌套的“数据集”集合数组,该数组也包含多个嵌套数组,然后将多个嵌套数组中的数据插入到我的数据库中

每个文件都包含不同且不断变化的嵌套数据集,因此我试图编写一个脚本,该脚本将使用数组中的数据动态构建sql insert语句

示例JSON数据

 {
"title" : "Exported Data",
"timestamp":"3/17/2017 10:35:13 PM",   //  I need the date from this string timestamp
"description":"this is unused",
"datasets":[
    {
        "ab":[{               //  I need this key value “ab” for the table name
                "STID":"1",   //  I need both the “STID” for the column name, and the value for the record row
                "qty":"440",
                "bal":"532882.71",
                "rem":"11.52"
            },
            {
                "STID":"2",
                "qty":"393",
                "bal":"406825.45",
                "rem":"11.16"
            },
            {
                "STID":"3",
                "qty":"517",
                "bal":"556259.82",
                "rem":"11.13"
            }]
    },

    {
        "act":[{
                "STID":"1",
                "BEG":"586",
                "DEL":"2",
                "RET":"3",
                "EBO":"1",
                "PO":"0",
                "CO":"0",
                "TX":"2",
                "RX":"3",
                "CUR":"584",
                "PTD":"-2",
                "WTD":"-19",
                "MTD":"-6"
            },
            {
                "STID":"2",
                "BEG":"519",
                "DEL":"12",
                "RET":"2",
                "EBO":"1",
                "PO":"0",
                "CO":"0",
                "TX":"0",
                "RX":"0",
                "CUR":"528",
                "PTD":"9",
                "WTD":"-3",
                "MTD":"65"
            },
            {
                "STID":"3",
                "BEG":"682",
                "DEL":"6",
                "RET":"4",
                "EBO":"2",
                "PO":"0",
                "CO":"0",
                "TX":"0",
                "RX":"0",
                "CUR":"682",
                "PTD":"0",
                "WTD":"2",
                "MTD":"22"
            }]
    },

   {
        "cashproj":[{
                "STID":"1",
                "DlyProj":"2542.4025",
                "RentCol":"1090.33",
                "PerCol":"42.8858"
            },
            {
                "STID":"2",
                "DlyProj":"1893.44",
                "RentCol":"2214.48",
                "PerCol":"116.9553"
            },
            {
                "STID":"3",
                "DlyProj":"2614.24",
                "RentCol":"1508.06",
                "PerCol":"57.6863"
            }]
    }
]}
-

MySQL表的名称与数据集的嵌套数组键相同(即“ab”、“act”、“cashproj”等)

对于每个数据集,我希望循环遍历每个嵌套数组,然后使用顶级数组键值、数据集键名和数据集数组键值中的数据创建并运行sql查询,例如:

这就是我目前拥有的:

$the_array = json_decode($json, true);
$topdata = new RecursiveArrayIterator($the_array);

$start = 'INSERT INTO ';

foreach ($topdata as $key => $value)
{
    if($key == 'timestamp')
    {
        $timestamp = strtotime($value);
    }
    if($key == 'datasets')
    {
        foreach ($value as $k => $v)
        {
            foreach ($v as $k2 => $v2)
            {
                foreach ($v2 as $dataset => $dsvalue)
                {
                    $col = '';
                    $val = '';
                    foreach ($dsvalue as $dskey => $dsval)
                    {
                        $col .= $dskey . ', ';
                        $val .= $dsval . ', ';
                        // echo "$dskey => $dsval <br>";
                    }
                    $col = rtrim($col,", ");
                    $val = rtrim($val,", ");
                    $sql = $start . $k2 . ' (date, ' . $col . ') VALUES (' . $timestamp . ', ' . $val . ')';
                    // echo $sql . '<br><br>';
                    // $q = new Query();
                    // $q->insertDB($sql);
                }
            }
        }
    }
}
$the_array=json_decode($json,true);
$topdata=新的递归数组迭代器(_数组);
$start='插入';
foreach($topdataas$key=>$value)
{
如果($key=='timestamp')
{
$timestamp=strottime($value);
}
如果($key=='datasets')
{
foreach($k=>v的值)
{
foreach($v为$k2=>$v2)
{
foreach($v2作为$dataset=>$dsvalue)
{
$col='';
$val='';
foreach($dsvalue作为$dskey=>$dsval)
{
$col.=$dskey.,';
$val.=$dsval.,';
//回显“$dskey=>$dsval
”; } $col=rtrim($col,“,”); $val=rtrim($val,“,”); $sql=$start.$k2.'(日期,'.$col.')值('.$timestamp.','.$val.'); //回显$sql。“

”; //$q=新查询(); //$q->insertDB($sql); } } } } }
我希望有人能向我展示一种更好或更有效的写作方法,它不包括五个嵌套的foreach语句

此外,我不确定我是否正确处理了时间戳的转换。稍后,我将结合DateDiff/DateAdd使用此列来查找时段之间的数据。如果当前的方法不正确,什么是正确的


提前感谢您的时间和回复。

应该会对您有所帮助,至少有一点。谢谢GMC。这确实有点帮助。