2013-06-03 71 views
1

我收到一条错误消息,解释以下错误。Json编码参数问题

json_encode() expects at most 2 parameters, 3 given</p> 

当我拨打电话到json_encode功能我已经设置所有三个paramters与accpted值。

我试图找出为什么这是因为当我测试我的代码时,我得到了所有接受的值,这个函数有什么想法吗?我认为这与switch语句有关,但我需要进一步。verifcation以及对我在做什么错误信息,有人可以告诉我请

public function output($message, $title, $status) 
{ 
    switch ($status) 
    { 
     case 'Error': 
      array('status' => 'Error'); 
      break; 
     case 'Notice': 
      array('status' => 'Notice'); 
      break; 
     case 'Success': 
      array('status' => 'Success'); 
      break; 
    } 
    echo json_encode($status, $title, $message); 
} 
+2

你给坏的参数。请参阅[json_encode](http://php.net/manual/en/function.json-encode.php) –

+0

我建议你在交换机内使用'strtoupper'功能,并且你的交换机不会去哪里。 –

回答

3

这里是我的建议,并会工作:

public function output($Message='', $Title='', $Status=''){ 
    # We make sure our status is perfect. 
    # We make sure our status will always be what we want and not something different by mistake. 
    # We default to "Error". 
    switch(strtoupper($Status)){ 
     default: 
      $Status = 'error'; 
     break; 

     case 'NOTICE': 
      $Status = 'notice'; 
     break; 

     case 'SUCCESS': 
      $Status = 'success'; 
     break; 
    } 

    # We output the content as JSON 
    header('Content-Type: application/json'); 
    echo json_encode(array(
     'status' => $Status, 
     'title'  => $Title, 
     'message' => $Message 
    )); 

    # Done - 0 mean the page end with no error (PHP error !) 
    exit(0); 
} 

输出:

output('this is my message', 'this is my title', 'error');

{ 
    "status" : "error", 
    "title" : "this is my title", 
    "message" : "this is my message" 
} 

之证件:

+0

我也喜欢这个,但是上面的开关的目的是用strtoupper函数和头部函数的事实,为什么这很重要。 –

+0

@KevinSmith'strtoupper'函数将确保如果您编写“eRroR”,它仍然会工作并成为“错误”。交换机将搜索“错误”而不是“eRroR”,即使您犯了错误,它也会最终工作。标题很重要。它告诉浏览器/客户端要传送什么类型的内容。如果内容类型设置不正确,某些客户端将不会接受您的服务器回答。 –

+1

正在做默认值:case'ERROR':switch语句的可接受语法 –

5

你可能寻找的东西是这样的:

echo json_encode(array($status, $title, $message)); 

,或者作为其他人则建议,像这样:

json_encode(array("status"=>$status, "title"=>$title, "message"=>$message)) 
3

您只能对单个数据结构进行编码。如果您想要编码三位数据,那么您必须首先将它们组合成一个数据结构。例如:

echo json_encode(Array("status" => $status, "title" => $title, "message" => $message)); 
3

我想你想要做的是编码一个数组?

public function output($message, $title, $status) 
{ 
    switch ($status) 
    { 
     case 'Error': 
      array('status' => 'Error'); 
      break; 
     case 'Notice': 
      array('status' => 'Notice'); 
      break; 
     case 'Success': 
      array('status' => 'Success'); 
      break; 
    } 
    echo json_encode(array($status, $title, $message)); 
} 
output('messageval', 'titleval', 'statusval'); 

将输出JSON,如:

["statusval", "titleval", "messageval"] 

或也有这样的:

public function output($message, $title, $status) 
{ 
    switch ($status) 
    { 
     case 'Error': 
      array('status' => 'Error'); 
      break; 
     case 'Notice': 
      array('status' => 'Notice'); 
      break; 
     case 'Success': 
      array('status' => 'Success'); 
      break; 
    } 
    echo json_encode(array('status'=>$status, 'title'=>$title, 'message'=>$message)); 
} 
output('messageval', 'titleval', 'statusval'); 

将输出的东西类似:

{"message":"messageval", "title":"titleval", "status":"statusval"} 

另外,您开关组将不会犯罪你不使用array()产生的数组。

+1

这意味着我可以完全删除它。 –

2

阅读,http://php.net/manual/en/function.json-encode.phphttp://php.net/manual/en/control-structures.switch.php你在用开关做什么?没什么!这是什么意思? case'错误': array('status'=>'Error');

我想你想的东西像下面,

public function output($message, $title, $status) 
{ 
    switch ($status) 
    { 
     case 'Error': 
      array('status' => 'Error'); 
      break; 
     case 'Notice': 
      array('status' => 'Notice'); 
      break; 
     case 'Success': 
      $output = $title . $message; 
      echo json_encode($output); 
      break; 
    } 

} 
+0

这不起作用。如果'$ status'不是'Success',它将失败。只有在'$ status'等于'Success'时它才会输出内容。如果程序员错误地输入了“eRror”,则没有任何默认和更正。 –

+0

在这种情况下,也许你不想要json_encode,你只是想'回声'发生错误';'所以,我只是贴出来帮助他,他必须做的确切编码。 –

+0

即使发生“回声”错误“;”,你正在打破这个事情。原因:如果您阅读了输出结果,则需要阅读json和/或cusetom消息。 –

2
public function output($message, $title, $status) 
    { 
     switch ($status) 
     { 
      case 'Error': 
       array('status' => 'Error'); 
       break; 
      case 'Notice': 
       array('status' => 'Notice'); 
       break; 
      case 'Success': 
       array('status' => 'Success'); 
       break; 
     } 
     echo json_encode(array('status' => $status, 'title' => $title, 
    'message' =>$message)); 

    } 

更多阿布牛逼json_encode请参阅本json_encode