2013-03-15 63 views
0

解码JSON输入我在写我的第一个Web服务,我有相关的JSON数据传递的问题。我有两个文件,我的网络服务分为:Controller.php这样,其中包含服务处理器,并service.php,其中包含的类和方法被要求提供服务。错误通过json_decode

这是Controller.php这样收购片段:

我可以参加的请求GET和POST模式(我用得到不需要身份验证方法,如getCategoriesgetCategoryByIdgetProducts and getProductById。这些是在寿司餐厅拿到菜类和菜肴的方法。)

对于任何GET请求,一切都按预期工作。我处理POST请求时出现问题。我需要在JSON中获取所有URL参数,因为这是为iOS应用提供服务,而JSON是我们处理数据的方式。

这是从service.php的处理片段:

public function putUser($datos) { 
     if (!empty($datos)) { 
      $usuario = json_decode($datos); 
      $this->log .= implode("/", $usuario) . "\r\n"; 

在这种情况下,$ DATOS从请求的JSON编码的数据。它接收,作为Controller.php这样$ ID(上面的代码)。因为这是我的第一个Web服务,所以很可能我在这里做的很糟糕,但我有点盲目。

我试过服务处理代码的不同变体。使用json_decode($ datos,true)也不起作用。我得到

“意外令牌<”作为回应,并在原始格式(使用谷歌Chrome高级REST客户端),它说:“”警告:破灭()[<a href='function.implode'>function.implode</a>]:无效的参数传入/在线344'上的home/refine/public_html/sushigo/palma/service.php。

我知道SOAP是,通常情况下,要编写自定义这样的代码,但是,现在一个更好的选择,我需要坚持这一代码并执行我的下一个项目一个更好的选择。你能告诉我我做错了什么吗?

+0

你可以发布'$ datos'变量的内容吗?它可能不是有效的JSON字符串。 – Munim 2013-03-15 10:43:32

+1

我发现最常见的问题是,当您的PHP警告打开并且正在被包含在脚本输出中时,将有效的JSON拧紧。 – Emissary 2013-03-15 10:46:45

回答

1

该错误消息说,基本上,它是不是一个有效的JSON - 和这样的错误信息通常是正确的。

你的错误是在某处发送/接收代码。可能你发送一种形式的JSON并尝试以其他方式访问它。由于我无法看到从手机发送的请求,我猜想:

  • 您发送数据作为应用程序/ json并尝试以url编码格式接收它。如果你不明白区别,这是你的问题。
  • 您使用JSON数据,这是错误的stripslashes。除非你打开了magic_quotes,这也是错误的(即:magic_quotes和stripslashes都必须去)。
+0

愚蠢的我...我真的不需要执行json_decode。我的同事通过POST向我发送了一个带有参数的字符串。据说,这是JSON,但似乎不是。鉴于此,我只需要删除任何对json_encode的引用,如普通的print_r($ _ POST [“datos”]);给了我提示。它本身就是数组格式,所以在这里没有JSON解码工作。感谢提示! :) – 2013-03-15 11:05:31

+0

很高兴听到它的作品:-)不过,我会检查stripslashes代码。可能所有你需要的是((int)$ todos)。 – fdreger 2013-03-15 11:28:35