在PHP中解码和访问json字典数组

时间:2014-12-30 15:48:51

标签: php mysql arrays json

我有以下json文件,我通过我的移动应用程序发送到PHP,在PHP端,我想解码它并将其插入到mysql数据库中。

 [{"Address":"Somewhere ",
    "Area":"Somwhe",
    "CreatedBy":null,
    "CreatedDate":"\/Date(1419786831365+0530)\/",
    "Distance":0,
    "EditedDate":"\/Date(-62135596800000+0000)\/",
    "Latitude":12.903999947011471,
    "Longitude":77.607999974861741,
    "Phone1":"80372899",
    "Phone2":"993729927",
    "Response":null,
    "StoreDescriptions":[],
    "StoreName":"First"},
    {"Address":"Addwmsj",
    "Area":"Sbnns",
    "CreatedBy":null,
    "CreatedDate":"\/Date(1419786863657+0530)\/",
    "Distance":0,
    "EditedDate":"\/Date(-62135596800000+0000)\/",
    "Latitude":12.960867136716843,
    "Longitude":77.647689711302519,
    "Phone1":"799268299",
    "Phone2":"68393973738",
    "Response":"Waiting",
    "StoreDescriptions":[{"LongNBQuantity":862,
                            "MeetDate":"\/Date(1419786915048+0530)\/",
                            "MeetSummary":"Meeting",
                            "Response":"Negative",
                            "StoreName":"Ssxond",
                            "id":1
                            },
                            {"LongNBQuantity":8862,
                            "MeetDate":"\/Date(1419786927673+0530)\/",
                            "MeetSummary":"Pjsjsbsj",
                            "Response":"Waiting",
                            "StoreName":"Ssxond",
                            "id":2}],
                            "StoreName":"Ssxond"},
    {"Address":"Sumwhere",
    "Area":"Righthere",
    "CreatedBy":null,
    "CreatedDate":"\/Date(1419953186686+0530)\/",
    "Distance":0,
    "EditedDate":"\/Date(-62135596800000+0000)\/",
    "Latitude":12.903999947011471,
    "Longitude":77.607999974861741,
    "Phone1":"872737288",
    "Phone2":"663838828",
    "Response":null,
    "StoreDescriptions":[],
    "StoreName":"NewEntry"}]

正如我们在此看到的那样,我有对象数组[{},{},{} ... {}],当其中一个对象具有{" abc&#等对象数组时,复杂性会增加34;:" bcd"," storedesc":[{},{},{},.... {}]},所以这与简单的jsons。

我的代码无效。谁能引导我朝着正确的方向前进感谢

$json = file_get_contents('php://input');
$result = json_decode($json,true);
/*
 Database connection setup done here.
*/

foreach ($result as $key => $value) {
    if($value){
        $sql = "INSERT INTO StoreInfo(name,created_date,edited_date,address,area,ph_num1,ph_num2,response,latitude,longitude) VALUES ($value->StoreName,$value->CreatedDate,'hellyeah',$value->Address,$value->Area,$value->Phone1,$value->Phone2,$value->Response,$value->Longitude,$value->Latitude)";
        if($conn->query($sql) === TRUE){
            echo "New record inserted";
        }
    }
}

2 个答案:

答案 0 :(得分:3)

有几个原因,这不起作用。

  • 因为您正在使用true标志,所以当您解码JSON时,您将只返回数组,并且如我所见,您希望在查询中使用对象。

  • 在你的查询中,不要用引号包装你的证据。

所以它会是这样的,但是,请参阅我的注意部分!

$sql = "INSERT INTO StoreInfo (name,created_date,edited_date,address,area,
        ph_num1,ph_num2,response,latitude,longitude) 
        VALUES ('".$value["StoreName"]."','".$value["CreatedDate"]."','hellyeah',
        '".$value["Address"]."','".$value["Area"]."','".$value["Phone1"]."',
        '".$value["Phone2"]."'
        ,'".$value["Response"]."','".$value["Longitude"]."','".$value["Latitude"]."')";

注意

  • 请从外部转义变量,或者使用预处理语句来避免sql注入!

答案 1 :(得分:1)

$result = json_decode($json,true);将其转换为数组。 true中的json_decode()参数将JSON转换为array()。因此,您应该$value['CreatedDate']而不是$value->CreatedDate访问价值,依此类推。

foreach ($result as $key => $value) {
    if($value){
        $sql = "INSERT INTO StoreInfo(name,created_date,edited_date,address,area,ph_num1,ph_num2,response,latitude,longitude) VALUES ('".$value['StoreName']."','".$value['CreatedDate']."','hellyeah','".$value['Address']."','".$value['Area']."','".$value['Phone1']."','".$value['Phone2']."','".$value['Response']."','".$value['Longitude']."','".$value['Latitude']."')";
        if($conn->query($sql) === TRUE){
            echo "New record inserted";
        }
    }
}

<强>参考: