在php中解码JSON对象


Decode JSON Object in php

我从android应用程序向web服务发送了一个JSON对象。(凌空抽射)。这是我代码的一部分。

private void sendtoDB(final String ngno){
    String tag_string_req = "req_save_to_db";
    final JSONObject JSONdates = new JSONObject();
    for(int i = 0 ; i < dates.size() ; i++){
        try{
            JSONdates.put("date", dates.get(i));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    StringRequest strReq = new StringRequest(Request.Method.POST,
            AppConfig.URL_UpdateDates, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) { ....}

        @Override
        protected Map<String, String> getParams() {
            // Posting params to register url
            Map<String, String> params = new HashMap<String, String>();
            params.put("ngno", ngno);
            params.put("JSON", JSONdates.toString());
            return params;
        }
    };
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}

dates数组包含我要存储在数据库中的几个日期字符串。下面是我的JSON对象(JSONdates)的输出。

{"日期":["2016年3月30日星期三00:00:00 GMT+05:30","2016年5月31日星期四00:00:00 GMT+0.5:30"]}

我的问题是如何在php中接收这个JSON对象,以及如何正确解码它,并将每个日期值获取到一个变量中,以便相应地执行sql查询。

这是我的php代码。

<?php
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
if(isset($_POST['ngno']) && isset($_POST['JSON']) ){
     $ngno = $_POST['ngno'];
     $json = json_decode($_POST['JSON'], true);

     foreach($json){
         $date = $json['date'];
         $job = $db->updateDates($ngno, $date);
         if($job){
              $response["error"] = FALSE;
              echo json_encode($response);
         }
         else{
             $response["error"] = TRUE;
             $response["error_msg"] = "Unknown error occurred in Updating!";
             echo json_encode($response);
        }
    }
}
else{
    $response["error"] = TRUE;
    $response["error_msg"] = "Dates are missing!";
    echo json_encode($response);     
}
?>

updateDates函数

public function updateDates($ngno, $date){
    $stmt = $this->conn->prepare("INSERT INTO datepicker(ngno, date) VALUES($ngno, $date)");
    $result = $stmt->execute();
    $stmt->close();
}

我在forearch($json)未接受的")"附近得到一个语法错误。

任何帮助都将不胜感激。

编辑1:

将php代码中的foreach循环更改为以下

foreach($dates as $date){
    error_log[$date];
    $job = $db->updateDates($ngno, $date);
    if($job){
        $response["error"] = FALSE;
        echo json_encode($response);
    }
    else{
        $response["error"] = TRUE;
        $response["error_msg"] = "Unknown error occurred in Updating!";
        echo json_encode($response);
    }
}

但现在它说,PHP警告:为foreach()提供的参数无效有什么帮助吗伙计们?我是编程新手,不知道如何修复它。

foreach($json){更改为foreach($json['dates'] as $date){并删除行$date = $json['date'];。有关foreach语法

的更多信息,请参阅关于foreach的php手册