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

在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)\/",

我有以下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”:“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";
        }
    }
}

有两个原因,这是行不通的

  • 因为您使用的是
    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注入
      有两个原因,这不起作用

      • 因为您使用的是
        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注入
      通过
      $result=json\u decode($json,true)将其转换为数组
      true
      json\u decode()中的参数
      convert
      json
      to
      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";
              }
          }
      }
      
      参考资料:


      通过
      $result=json\u decode($json,true)将其转换为数组
      true
      json\u decode()中的参数
      convert
      json
      to
      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";
              }
          }
      }
      
      参考资料:


      1)考虑使用SQL语句和2编写的语句),因为JSON具有嵌套结构,需要多个具有某种连接键的数据库表。什么是“不工作”?这是什么意思?“不工作”没有任何意义。你看到错误了吗?是否有任何记录插入数据库?你的电脑突然死机了吗?不管怎样,让我们试试调试。您是否尝试
      echo$sql
      查看您尝试运行的查询是什么?另外,不要仅仅假设查询有效。使用错误检查!添加<代码>否则{死亡($CONN->错误);} .@ MR.LAMLA,我使用3个表,但首先我想把它插入到1个表中。1)考虑使用SQL语句和2编写的语句),因为您的JSON具有嵌套结构,需要多个具有某种连接键的数据库表。什么是“不工作”?这是什么意思?“不工作”没有任何意义。你看到错误了吗?是否有任何记录插入数据库?你的电脑突然死机了吗?不管怎样,让我们试试调试。您是否尝试
      echo$sql
      查看您尝试运行的查询是什么?另外,不要仅仅假设查询有效。使用错误检查!Add
      else{die($conn->error);}
      @Mr.Llama我正在使用3个表,但首先我想将其插入1个表中。您忘记在查询中的值周围添加引号。您忘记在查询中的值周围添加引号。由于列太多,使用准备好的语句会产生更干净的代码段。由于列太多,使用准备好的语句会产生更干净的代码段。