PHP: Json解码错误


PHP: Json decode error

我试图解析json字符串到mysql,但我得到一个错误说array_keys()期望参数1是数组,空给出在第58行。

<?php
function array_value_recursive($key , $arr){
$val = array();
array_walk_recursive($arr, function ($v, $k) use($key, &$val){
if($k == $key) array_push($val, $v);
        });
return count($val) > 1 ? $val : array_pop($val);
    }
// get tag
$tag = $_POST['tag'];
// include db handler
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
// response Array
$response = array("tag" => $tag, "error" => FALSE);
// check for tag type
if ($tag == 'register') {
    // Request type is Register new user
    $name = $_POST['UserName'];
    $phone = $_POST['Phone'];
    $date=$_POST['userAddedDate'];
    $userIsActive=$_POST['isUserActive'];

        // store user
        $user = $db->storeUser($name,$phone,$date,$userIsActive);
        if ($user!=null) {
            // user stored successfully
           $response["user"]["uid"] = $user["uid"];
            $response["user"]["UserName"] = $user["userName"];
            $response["user"]["Phone"] = $user["userPhone"];
            $response["user"]["isUserActive"] = $user["isUserActive"];
            $response["user"]["Register"] = true;

            echo json_encode($response);
        }
        else {
           $user1 = $db->UserExist($name,$phone);
            // user failed to store
            $response["user"]["uid"] = $user1["uid"];
            $response["user"]["Register"] = false;
            $response["error_msg"] = "user_exist";
            echo json_encode($response);
        }
}
else if($tag == 'CompleteTrip'){

    $trip= $_POST['Trip'];
    // $tripstartDate = $_POST['tripStartDate'];
    // $uid=$_POST['userID'];
    // $bumpGravity = $_POST['bumpGravity'];
    // $bumpLong=$_POST['bumpLong'];
    // $bumplat=$_POST['bumplat'];
    // $bumpTime=$_POST['bumpTime'];
    //$bump=$_POST['bump'];
    $arraykey=array_keys($trip);
    $tripcount=count($arraykey);
    for ($i=0; $i < $tripcount ; $i++) { 
        //  print_r($arr[$arraykey[$i]]);
        $tripDescription=array_value_recursive('tripDescription',    
 $trip[$arraykey[$i]]);
        $tripStartDate=array_value_recursive('tripStartDate', 
 $trip[$arraykey[$i]]);
        $userID=array_value_recursive('userID', $trip[$arraykey[$i]]);
        $bumpGravity=array_value_recursive('bumpGravity', 
 $trip[$arraykey[$i]]);
        $bumpLong=array_value_recursive('bumpLong', $trip[$arraykey[$i]]);
        $bumplat=array_value_recursive('bumplat', $trip[$arraykey[$i]]);
        $bumpTime=array_value_recursive('bumpTime', $trip[$arraykey[$i]]);
        $trip1 = $db-
  >addcompletetrip($tripDescription,$tripStartDate,$userID,$bumpGravity,
   $bumpLong,
  $bumplat,$bumpTime);

    }

    //$trip = $db->addcompletetrip($tripdescription,$tripstartDate,$uid,$bumpGravity,$bumpLong,$bumplat,$bumpTime);
    if ($trip1) {
        $response["trip"]["feedback"] = "true";
        echo json_encode($response);
    }
    else
    {
        $response["trip"]["feedback"] = "false";
        echo json_encode($response);
    }
}
else if ($tag == 'Trip') {
    $tripdescription = $_POST['tripDescription'];
    $tripstartDate = $_POST['tripStartDate'];
    $uid=$_POST['userID'];

        // store trip
        $trip = $db->tripstart($tripdescription,$tripstartDate,$uid);
        if ($trip) {
            // trip stored successfully
            $response["trip"]["Description"] = $trip["tripDescription"];
            $response["trip"]["startDate"] = $trip["tripStartDate"];
            $response["trip"]["userID"] = $trip["userID"];
            $response["trip"]["tripID"] = $trip["tripID"];

            echo json_encode($response);
        } else {
            // user failed to store
            $response["error"] = false;
            $response["error_msg"] = "Error occured in Registartion";
            echo json_encode($response);
        }
   }
   else if ($tag == 'Bump') {
    // Request type is Register new user
    $tripID = $_POST['tripId'];
    $bumpGravity = $_POST['bumpGravity'];
    $bumpLong=$_POST['bumpLong'];
    $bumplat=$_POST['bumplat'];
    $bumpTime=$_POST['bumpTime'];

        // store trip
        $trip = $db-
    >addbumps($tripID,$bumpGravity,$bumpLong,$bumplat,$bumpTime);
        if ($trip) {
            // trip stored successfully
            $response["bump"]["feedback"] = "true";

            echo json_encode($response);
        } else {
            // user failed to store
            $response["error"] = false;
            $response["error_msg"] = "Error occured in Registartion";
            echo json_encode($response);
        }
    }
     else if ($tag == 'LeaderBoard') {
        // store trip
        $LBresponse = $db-
  >addbumps($tripID,$bumpGravity,$bumpLong,$bumplat,$bumpTime);
        if ($LBresponse) {

            echo json_encode($LBresponse);
        } else {
            // user failed to store
            $response["error"] = false;
            $response["error_msg"] = "Error occured in during data 
       fetching";
            echo json_encode($response);
        }
      }
      else if ($tag == 'userHistory') {
       $uid=$_POST['userID'];

        // store trip
        $history = $db->showhistory($uid);
         if ($history) {

            echo json_encode($history);
        } else {
            // user failed to store
            $response["error"] = false;
            $response["error_msg"] = "Error occured in during data 
      fetching";
            echo json_encode($response);
        }

         }
       else {
       // user failed to store
    $response["error"] = false;
    $response["error_msg"] = "error in saving data";
    echo json_encode($response);
    }
   ?>

这是json字符串

{
  "tag" : "CompleteTrip",
  "Trip" : [
    {
      "tripDescription" : "My Trip number 17",
      "userID" : "35",
      "bump" : [
        {
          "bumpLong" : "73.089104",
          "bumplat" : "33.732934",
          "bumpTime" : "20.05.2015",
          "bumpGravity" : 0.5719842483606042
        },
        {
          "bumpLong" : "73.089104",
          "bumplat" : "33.732934",
          "bumpTime" : "20.05.2015",
          "bumpGravity" : 0.4080177753918094
        },
        {
          "bumpLong" : "73.089104",
          "bumplat" : "33.732934",
          "bumpTime" : "20.05.2015",
          "bumpGravity" : 0.448878156374468
        }
      ],
      "tripStartDate" : "20.05.2015"
    },
    {
      "tripDescription" : "My Trip number 18",
      "userID" : "35",
      "bump" : [
        {
          "bumpLong" : "73.089105",
          "bumplat" : "33.732965",
          "bumpTime" : "20.05.2015",
          "bumpGravity" : 0.6059529999867896
        },
        {
          "bumpLong" : "73.089105",
          "bumplat" : "33.732965",
          "bumpTime" : "20.05.2015",
          "bumpGravity" : 0.4395928505184715
        },
        {
          "bumpLong" : "73.089105",
          "bumplat" : "33.732965",
          "bumpTime" : "20.05.2015",
          "bumpGravity" : 0.4675621285346855
        },
        {
          "bumpLong" : "73.089105",
          "bumplat" : "33.732965",
          "bumpTime" : "20.05.2015",
          "bumpGravity" : 0.6471158319159812
        }
      ],
      "tripStartDate" : "20.05.2015"
    },
    {
      "tripDescription" : "My Trip number 19",
      "userID" : "35",
      "bump" : [
        {
          "bumpLong" : "73.089216",
          "bumplat" : "33.733184",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.6152545665366322
        },
        {
          "bumpLong" : "73.089216",
          "bumplat" : "33.733184",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.5464117459805118
        },
        {
          "bumpLong" : "73.089216",
          "bumplat" : "33.733184",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.5087776494496044
        }
      ],
      "tripStartDate" : "21.05.2015"
    },
    {
      "tripDescription" : "My Trip number 20",
      "userID" : "35",
      "bump" : [
        {
          "bumpLong" : "73.089113",
          "bumplat" : "33.732939",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.7385709255522828
        },
        {
          "bumpLong" : "73.089113",
          "bumplat" : "33.732939",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.607726128634555
        },
        {
          "bumpLong" : "73.089113",
          "bumplat" : "33.732939",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.5887302539592243
        },
        {
          "bumpLong" : "73.089113",
          "bumplat" : "33.732939",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.4596315163659364
        }
      ],
      "tripStartDate" : "21.05.2015"
    },
    {
      "tripDescription" : "My Trip number 21",
      "userID" : "35",
      "bump" : [
        {
          "bumpLong" : "73.089105",
          "bumplat" : "33.732965",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.6060029844771418
        },
        {
          "bumpLong" : "73.089105",
          "bumplat" : "33.732965",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.4437488421895869
        },
        {
          "bumpLong" : "73.089105",
          "bumplat" : "33.732965",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.4253806333440103
        },
        {
          "bumpLong" : "73.089105",
          "bumplat" : "33.732965",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.7034483457347098
        }
      ],
      "tripStartDate" : "21.05.2015"
    },
    {
      "tripDescription" : "My Trip number 22",
      "userID" : "35",
      "bump" : [
        {
          "bumpLong" : "73.089067",
          "bumplat" : "33.732891",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.5309099143204541
        },
        {
          "bumpLong" : "73.089014",
          "bumplat" : "33.732961",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.4918705089435963
        },
        {
          "bumpLong" : "73.089067",
          "bumplat" : "33.732891",
          "bumpTime" : "21.05.2015",
          "bumpGravity" : 0.6217900667121954
        }
      ],
      "tripStartDate" : "21.05.2015"
    }
  ]
}

因为array_keys()需要一个数组,而$trip是一个(json-)字符串。在使用json-data之前,必须调用json_decode()。