Php Silex-应用程序->;json()以字符串形式返回整数数据

Php Silex-应用程序->;json()以字符串形式返回整数数据,php,mysql,json,silex,Php,Mysql,Json,Silex,我刚开始与Silex合作,帮助我构建一个restful api,从MySQL数据库返回数据。以前在使用php和mysql时,我注意到mysql会在我的json\u encode()函数中以字符串形式返回整数。它会在我所有的整数值周围加引号。我能够解决这个问题的唯一方法是将JSON\u NUMERIC\u CHECK传递到JSON\u encode函数中: return json_encode($array, JSON_NUMERIC_CHECK); 为我所需要的工作做得很好。现在我正在使用si

我刚开始与Silex合作,帮助我构建一个restful api,从MySQL数据库返回数据。以前在使用php和mysql时,我注意到mysql会在我的
json\u encode()
函数中以字符串形式返回整数。它会在我所有的整数值周围加引号。我能够解决这个问题的唯一方法是将
JSON\u NUMERIC\u CHECK
传递到
JSON\u encode
函数中:

return json_encode($array, JSON_NUMERIC_CHECK);
为我所需要的工作做得很好。现在我正在使用silex,我一直在使用它的内置json函数从控制器返回值。我注意到,整数作为带引号的字符串返回时也有同样的问题

$app->get('/suppliers', function () use ($app) {
    $sql = "SELECT * FROM suppliers";
    $suppliers = $app['db']->fetchAll($sql);

    return $app->json(array('suppliers' => $suppliers));
});
供应商有一个
supplier\u id
字段,该字段是一个整数,但它在json数据中作为字符串返回。我尝试将
JSON\u NUMERIC\u CHECK
传递到数组后面的
$app->JSON()
函数中,但会得到一个
InvalidArguementException

我确实发现不用
$app->json()
函数,我只需要使用
json\u encode()
php函数,它就可以工作了。像这样:

$app->get('/suppliers', function () use ($app) {
    $sql = "SELECT * FROM suppliers";
    $suppliers = $app['db']->fetchAll($sql);

    //return $app->json(array('suppliers' => $suppliers));
    return json_encode(array('suppliers' => $suppliers), JSON_NUMERIC_CHECK);
});
有什么理由不这样做而不使用silex
$app->json()
函数吗?有更好的方法吗

$app->json(…)
返回响应
JsonResponse
。您可以手动创建此类响应并设置编码选项

$app->get('/suppliers', function () use ($app) {
    $sql = "SELECT * FROM suppliers";
    $suppliers = $app['db']->fetchAll($sql);

    $response = new \Symfony\Component\HttpFoundation\JsonResponse();
    $response->setEncodingOptions(JSON_NUMERIC_CHECK);
    $response->setData(array('suppliers' => $suppliers));

    return $response;
});
或设置allready编码内容

$app->get('/suppliers', function () use ($app) {
    $sql = "SELECT * FROM suppliers";
    $suppliers = $app['db']->fetchAll($sql);

    $response = new \Symfony\Component\HttpFoundation\JsonResponse();
    $response->setContent(json_encode(array('suppliers' => $suppliers), JSON_NUMERIC_CHECK));

    return $response;
});

尝试使用setEncodingOptions

return $app->json($var, Response::HTTP_OK)->setEncodingOptions(JSON_NUMERIC_CHECK);

“供应商有一个供应商id字段,它是一个整数,但它在json数据中以字符串的形式返回”-这导致了在何处以及如何返回的问题,因此需要在此处进行修复?//在某些情况下,将整数值转换为字符串实际上更可取——以Facebook的API为例,它们的用户ID在很长一段时间内“看起来”像整数,但随着用户基数的增加,这很容易在最大整数值较低的平台上引发问题——导致它们被转换为浮点数,因此失去了精度,变得不可用。为了使其api更广泛,我建议使用
$app->after(function(Request$Request,Response$Response){if(0==strpos($Response->headers->get('Content-Type'),'application/json'){$Response->setEncodingOptions(json_NUMERIC_CHECK);})将其添加到中间件中