PHP: Json解码错误

标签 php mysql json

我正在尝试将 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_decode()在使用 json 数据之前。

关于PHP: Json解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30450358/

相关文章:

jquery - 利用 Coldfusion 返回 json 对象的最简单方法(来自查询)

javascript - Google 图表中每个日期的多个数据点

php - 你如何为登录/未登录制作 2 个不同的 View ,如 facebook 的新闻源/登录页面?

mysql - 比较两个不同类型的数据库表并比较它们的数据?

java - Boon JSON - 更改对象反序列化的字段名称

javascript - 有没有办法以临时文件的形式访问服务器端 ajax 响应?

php - 如何从一列时间值中将它们与当前时间进行比较并获得当前时间之后最接近的值?

javascript - 从 php 调用 Javascript 函数

mysql - 在Windows 7上将数据从heroku加载到本地MySQL

mysql - 从远程服务器到远程服务器的 SSH 隧道(将 RStudio 连接到 MySQL)