在PHP中解码和访问json字典数组
我有以下json文件,我通过我的移动应用程序将其发送到PHP,在PHP端,我想对其进行解码并将其插入mysql数据库在PHP中解码和访问json字典数组,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我有以下json文件,我通过我的移动应用程序将其发送到PHP,在PHP端,我想对其进行解码并将其插入mysql数据库 [{"Address":"Somewhere ", "Area":"Somwhe", "CreatedBy":null, "CreatedDate":"\/Date(1419786831365+0530)\/", "Distance":0, "EditedDate":"\/Date(-62135596800000+0000)\/",
[{"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”:“bcd”,“storedesc”:[{},{},{},{},…..{}]}这样的对象数组时,复杂性会增加,因此与简单的JSON相比,这有点复杂
我的代码不起作用。谁能给我指路吗。谢谢
$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";
}
}
}
有两个原因,这是行不通的
- 因为您使用的是
标志,当您解码JSON时,您将只返回数组,正如我所看到的,您希望在查询中使用对象true
- 在您的查询中,不要用引号包装您的应收账款
$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注入李>
- 有两个原因,这不起作用
- 因为您使用的是
标志,当您解码JSON时,您将只返回数组,正如我所看到的,您希望在查询中使用对象true
- 在您的查询中,不要用引号包装您的应收账款
- 请转义来自外部的变量,或使用准备好的语句避免sql注入李>
注意$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"]."')";
convert$result=json\u decode($json,true)代码>将其转换为数组
json\u decode()中的参数true
tojson
。因此,您应该通过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"; } } }
convert$result=json\u decode($json,true)代码>将其转换为数组
json\u decode()中的参数true
tojson
。因此,您应该通过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"; } } }
查看您尝试运行的查询是什么?另外,不要仅仅假设查询有效。使用错误检查!添加<代码>否则{死亡($CONN->错误);} .@ MR.LAMLA,我使用3个表,但首先我想把它插入到1个表中。1)考虑使用SQL语句和2编写的语句),因为您的JSON具有嵌套结构,需要多个具有某种连接键的数据库表。什么是“不工作”?这是什么意思?“不工作”没有任何意义。你看到错误了吗?是否有任何记录插入数据库?你的电脑突然死机了吗?不管怎样,让我们试试调试。您是否尝试echo$sql
查看您尝试运行的查询是什么?另外,不要仅仅假设查询有效。使用错误检查!Addecho$sql
@Mr.Llama我正在使用3个表,但首先我想将其插入1个表中。您忘记在查询中的值周围添加引号。您忘记在查询中的值周围添加引号。由于列太多,使用准备好的语句会产生更干净的代码段。由于列太多,使用准备好的语句会产生更干净的代码段。else{die($conn->error);}
- 因为您使用的是