Silex - app->json() 将整数数据作为字符串返回
Silex - app->json() returning integer data as strings
我刚开始使用 Silex 来帮助我构建一个 restful api,其中 return 的数据来自我的 MySQL 数据库。以前在使用 php 和 mysql 时,我注意到 MySQL 会将 return 整数作为我的 json_encode()
函数中的字符串。它会在我所有的整数值周围加上引号。我能够解决这个问题的唯一方法是将 JSON_NUMERIC_CHECK
传递给 json_encode
函数:
return json_encode($array, JSON_NUMERIC_CHECK);
工作得很好,满足了我的需要。现在我正在使用 silex,我一直在使用它的内置 json 函数从我的控制器获取 return 值。我注意到我遇到了同样的问题,整数被 returned 作为带有引号的字符串。
$app->get('/suppliers', function () use ($app) {
$sql = "SELECT * FROM suppliers";
$suppliers = $app['db']->fetchAll($sql);
return $app->json(array('suppliers' => $suppliers));
});
供应商有一个 supplier_id
字段,它是一个整数,但它在 json 数据中被 return 编辑为字符串。我尝试在我的数组之后将 JSON_NUMERIC_CHECK
传递给 $app->json()
函数,但会得到 InvalidArguementException
。
我确实发现我可以使用 json_encode()
php 函数而不是使用 $app->json()
函数,它会起作用。像这样:
$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(...)
returns 回复 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;
});
或设置所有已编码的内容
$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);
我刚开始使用 Silex 来帮助我构建一个 restful api,其中 return 的数据来自我的 MySQL 数据库。以前在使用 php 和 mysql 时,我注意到 MySQL 会将 return 整数作为我的 json_encode()
函数中的字符串。它会在我所有的整数值周围加上引号。我能够解决这个问题的唯一方法是将 JSON_NUMERIC_CHECK
传递给 json_encode
函数:
return json_encode($array, JSON_NUMERIC_CHECK);
工作得很好,满足了我的需要。现在我正在使用 silex,我一直在使用它的内置 json 函数从我的控制器获取 return 值。我注意到我遇到了同样的问题,整数被 returned 作为带有引号的字符串。
$app->get('/suppliers', function () use ($app) {
$sql = "SELECT * FROM suppliers";
$suppliers = $app['db']->fetchAll($sql);
return $app->json(array('suppliers' => $suppliers));
});
供应商有一个 supplier_id
字段,它是一个整数,但它在 json 数据中被 return 编辑为字符串。我尝试在我的数组之后将 JSON_NUMERIC_CHECK
传递给 $app->json()
函数,但会得到 InvalidArguementException
。
我确实发现我可以使用 json_encode()
php 函数而不是使用 $app->json()
函数,它会起作用。像这样:
$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(...)
returns 回复 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;
});
或设置所有已编码的内容
$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);