php - JSON 在响应上被垃圾稀释
问题描述
我使用 Symfony 5.2。(作曲家更新完成)
PHP 7.4
带有 PHP + NGINX 反向代理 Docker 容器的 Docker 容器。
有一个问题,就是控制器给出了一个无效的 JSON 响应。
但是问题发生在产品上,而不是本地。并不是每个答案都带有损坏的 JSON,而是周期性的,我无法猜测,可能是第三次,或者可能是第 5 次,或者第 7 次,但不断。控制器本身接收一个 JSON 字符串作为参数,并输出一个 JSON 字符串作为输出 (new JsonResponse($data))。
这是控制器的参数
{order: "22", productType: "2", productId: "64"}
这是控制器最终应该放弃的东西
{"order":22,"count":1,"price":5000,"currency":"RUB","cart":[{"id":923,"order":22,"productType":2,"productId":64,"count":1,"created":{"date":"2021-02-03 19:06:39.634912","timezone_type":3,"timezone":"UTC"}}]}
这就是真正给
{"order":"22","product_type":"2","product_id":"64"}{"order":22,"count":1,"price":5000,"currency":"RUB","cart":[{"id":923,"order":22,"productType":2,"productId":64,"count":1,"created":{"date":"2021-02-03 19:06:39.634912","timezone_type":3,"timezone":"UTC"}}]}
也就是说,我的参数被添加到 JSON 响应的开头。注意垃圾字符串后面没有逗号,垃圾字符串中的索引看起来像snake_case,尽管其他所有内容都像camelCase
一开始,我以为可能是在 NGINX 中,但那里一切正常。我使用了 tcpdump 实用程序来检查究竟是什么给了 Symfony 的 PHP 容器。并且有损坏的 JSON。
我还保存在序列化数组的日志数据中,但在日志中一切正常。
我在new JsonResponse()之前写入日志,一个有效的数组被写入没有垃圾。
我为优先级为 -10000 的 Response 事件创建了 EventListener(以便最后调用它),并且在其中我还将结果响应写入日志,并且有一个有效的 JSON
我是在主文件public/index.php之前脚本的响应,我也把它的响应写到日志里,还有一个有效的没有垃圾的JSON
告诉我我该如何解决?
/**
* @Route("/add-product-to-cart", name="add_product_to_cart", methods={"POST"})
*
* @param Request $request
* @param OrderProvider $orderProvider
* @param LoggerInterface $logger
* @return JsonResponse
*/
public function addProductToCart(Request $request, OrderProvider $orderProvider, LoggerInterface $logger): JsonResponse
{
$data = json_decode($request->getContent(), true);
try {
$cart = $orderProvider
->order($data['order'])
->addProduct($data['product_type'], $data['product_id'], $data['count'] ?? 1)
->cartsAsArray()
;
$result = [
'order' => $orderProvider->orderId(),
'count' => $orderProvider->count(),
'price' => $orderProvider->price(),
'currency' => $orderProvider->currency()->getCode(),
'cart' => $cart,
];
// Тут пишу в лог массив. Там все чтеко !!!
$logger->error('Server return: ' . json_encode($result));
return new JsonResponse($result);
} catch (\Exception $e) {
$logger->error($e->getMessage());
}
return new JsonResponse([
'error' => 1,
'message' => $e->getMessage(),
]);
}
解决方案
推荐阅读
- python-2.7 - 引发 BadValueError(实体具有未初始化的属性:created_by)
- python - 如何在python中使用字典替换列表中的字符
- powershell - Illegal Character '?' a when I create the JSON using ConvertTo-JSON
- oracle - Oracle - 我不能在同一个脚本中创建和使用同义词?
- google-bigquery - Bigquery:逻辑回归问题
- scala - How to create exponential restart strategy for specific error types in an Akka stream?
- asp.net-core - 使用 Swashbuckle.AspNetCore 如何为 FromBody 参数提供表单?
- excel - VBA,空单元格在最后一行
- python - 如何将 Django 设置导入 python 独立脚本
- sql - 连接具有多级聚合的表