PHP - 从json保存对象密钥

时间:2016-08-04 20:45:34

标签: php mysql json

对于noobie问题,我很抱歉,我正在尝试将一些json数据保存到我的数据库中。问题是,我不知道如何获得任何“parent_names”。 “parent_name”始终与子“name”相同。

价格data.json

[
    {
        "Flag": {
            "name": "Flag",
            "safe_price": "118.31",
            "safe_net_price": "110.60",
            "total_volume": 3148,
            "7_days": {
                "median_price": "118.31",
                "lowest_price": "100.00",
                "highest_price": "132.25",
                "volume": 94
            }
        },
        "Pole": {
            "name": "Pole",
            "safe_price": "81.21",
            "safe_net_price": "70.62",
            "total_volume": 1,
            "7_days": {
                "volume": 0
            }
        },
        "Net": {
            "name": "Net",
            "safe_price": "0.89",
            "safe_net_price": "0.84",
            "total_volume": 763,
            "7_days": {
                "median_price": "0.89",
                "lowest_price": "0.65",
                "highest_price": "1.08",
                "volume": 30
            }
        }
    }
]

PHP

$filename = "price-data.json";  
$data = file_get_contents($filename);  
$array = json_decode($data, true);


foreach($array as $row)  
 {  
      $sql = "INSERT INTO table_all_prices(parent_name, name, safe_price, safe_net_price, total_volume, median_price, lowest_price, highest_price, volume) VALUES (
      '".$row["parent_name"]."', 
      '".$row["parent_name"]["name"]."', 
      '".$row["parent_name"]["safe_price"]."', 
      '".$row["parent_name"]["safe_net_price"]."', 
      '".$row["parent_name"]["total_volume"]."', 
      '".$row["parent_name"]["7_days"]["median_price"]."',
      '".$row["parent_name"]["7_days"]["lowest_price"]."',
      '".$row["parent_name"]["7_days"]["highest_price"]."',
      '".$row["parent_name"]["7_days"]["volume"]."'
      )";       
 }  
 echo "All Prices inserted to database";  

1 个答案:

答案 0 :(得分:0)

您需要从循环中的当前数组级别访问密钥,您可以通过

执行此操作
 foreach($array as $parent_name => $row)

$row变量之前添加一个变量,将其视为数组访问

 array( 'key' => 'value' )

同样的交易。现在因为你在" parent_name"您不需要在其中放置附加访问密钥的阵列级别。所以对于这个

$row["parent_name"]["7_days"]["volume"]

你可以做到

$row["7_days"]["volume"]

因为你将在json的这一部分工作

        "name": "Net",
        "safe_price": "0.89",
        "safe_net_price": "0.84",
        "total_volume": 763,
        "7_days": {
            "median_price": "0.89",
            "lowest_price": "0.65",
            "highest_price": "1.08",
            "volume": 30
        }

然后因为你的json [{ .. }]那个方括号上有一个外部数组包装器。您可能需要$array[0]$array = reset($array)。重置可能更好(如果事实证明是这种情况),因为如果数组为空,您将避免来自PHP的一些警告消息。从本质上讲,尝试访问0的密钥,如果它是空的,会给你一个未定义的索引警告..