【问题标题】:json_decode() expecting a string, I could only get an arrayjson_decode() 期待一个字符串,我只能得到一个数组
【发布时间】:2013-06-17 23:09:45
【问题描述】:

我正在使用Slim Framework,试图构建一个REST API。长话短说,我花了 4 个小时寻找解决问题的方法,因为 json_decode 不会将 getBody() 返回的数组作为参数。

使用 Chrome 的高级 REST 客户端,我在执行 post request 时遇到的错误是:

Slim Application Error
The application could not run because of the following error:

Details

Type: ErrorException
Code: 2
Message: json_decode() expects parameter 1 to be string, array given
File: C:\xampp\htdocs\farmacias\index.php
Line: 100
Trace

#0 [internal function]: Slim\Slim::handleErrors(2, 'json_decode() e...', 'C:\xampp\htdocs...', 100, Array)
#1 C:\xampp\htdocs\farmacias\index.php(100): json_decode(Array)
#2 [internal function]: {closure}()
#3 C:\xampp\htdocs\farmacias\Slim\Router.php(172): call_user_func_array(Object(Closure), Array)
#4 C:\xampp\htdocs\farmacias\Slim\Slim.php(1222): Slim\Router->dispatch(Object(Slim\Route))
#5 C:\xampp\htdocs\farmacias\Slim\Middleware\Flash.php(86): Slim\Slim->call()
#6 C:\xampp\htdocs\farmacias\Slim\Middleware\MethodOverride.php(94): Slim\Middleware\Flash->call()
#7 C:\xampp\htdocs\farmacias\Slim\Middleware\ContentTypes.php(80): Slim\Middleware\MethodOverride->call()
#8 C:\xampp\htdocs\farmacias\Slim\Middleware\PrettyExceptions.php(67): Slim\Middleware\ContentTypes->call()
#9 C:\xampp\htdocs\farmacias\Slim\Slim.php(1174): Slim\Middleware\PrettyExceptions->call()
#10 C:\xampp\htdocs\farmacias\index.php(139): Slim\Slim->run()
#11 {main}

还有我的一段代码,即第 100 行带有 json_decode 的代码

// POST /localidades
$app->post('/localidades', function () use ($app){
    // Obtenemos el cuerpo del request, y lo decodificamos
    $request = $app->request();
    $body = $request->getBody();
    $input = json_decode($body);

    // Creamos y guardamos el registro
    $eloc = R::dispense('localidades');
    $eloc->nombre = (string)$input->nombre;
    $eloc->provincia = (string)$input->provincia;
    R::store($eloc);

    // Creamos y devolvemos JSON
    $app->response()->status(201);
    $app->response()->header('Content-Type','application/json');
    echo json_encode(R::exportAll($eloc));

});

如果有人可以帮助我,我会很高兴。当然,我也想知道我是做错了什么还是走错了路。我花了很多时间寻找答案,但我找不到任何答案。

【问题讨论】:

  • 那么 $request->getBody() 现在究竟返回了什么?
  • @mario 如果我做一个 var_dump($body);我得到 ---> array(2) { ["nombre"]=> string(12) "General Pico" ["provincia"]=> string(1) "1" }
  • 您认为为什么需要解码以及其中的哪一部分需要解码?
  • 你不会相信我什至粘贴了那个并且没有注意到它。我只需要将数组转换为对象,就是这样。你非常有帮助,如果你喜欢它,我会很高兴将你标记为正确答案。谢谢马里奥!但是公主在另一个城堡哈哈

标签: php rest json slim


【解决方案1】:

您已经在 $input 中解码了数据,因此不需要在那里解码任何内容。您还可以避免不必要的转换,因为在这种情况下不需要这些转换(PHP 是一种弱类型语言)。

【讨论】:

    猜你喜欢
    • 2015-10-19
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2013-05-03
    • 2013-11-12
    • 2017-12-17
    相关资源
    最近更新 更多